shunt-manager: Remove stored entries if installation fails
This commit is contained in:
@@ -122,7 +122,7 @@ METHOD(shunt_manager_t, install, bool,
|
|||||||
{
|
{
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
child_cfg_t *child_cfg;
|
child_cfg_t *child_cfg;
|
||||||
bool found = FALSE;
|
bool found = FALSE, success;
|
||||||
|
|
||||||
/* check if not already installed */
|
/* check if not already installed */
|
||||||
this->lock->write_lock(this->lock);
|
this->lock->write_lock(this->lock);
|
||||||
@@ -146,7 +146,16 @@ METHOD(shunt_manager_t, install, bool,
|
|||||||
this->shunts->insert_last(this->shunts, child->get_ref(child));
|
this->shunts->insert_last(this->shunts, child->get_ref(child));
|
||||||
this->lock->unlock(this->lock);
|
this->lock->unlock(this->lock);
|
||||||
|
|
||||||
return install_shunt_policy(child);
|
success = install_shunt_policy(child);
|
||||||
|
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
this->lock->write_lock(this->lock);
|
||||||
|
this->shunts->remove(this->shunts, child, NULL);
|
||||||
|
this->lock->unlock(this->lock);
|
||||||
|
child->destroy(child);
|
||||||
|
}
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user