From: Tobias Brunner Date: Tue, 14 Jul 2015 14:50:32 +0000 (+0200) Subject: shunt-manager: Remove stored entries if installation fails X-Git-Tag: 5.3.3dr2~9^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=616ff9a2369fd250a2b9e8d2a00f37e2e8d3a2f3;p=thirdparty%2Fstrongswan.git shunt-manager: Remove stored entries if installation fails --- diff --git a/src/libcharon/sa/shunt_manager.c b/src/libcharon/sa/shunt_manager.c index 434bacee7e..2e42e7ebd4 100644 --- a/src/libcharon/sa/shunt_manager.c +++ b/src/libcharon/sa/shunt_manager.c @@ -122,7 +122,7 @@ METHOD(shunt_manager_t, install, bool, { enumerator_t *enumerator; child_cfg_t *child_cfg; - bool found = FALSE; + bool found = FALSE, success; /* check if not already installed */ 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->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; } /**