From: Tobias Brunner Date: Wed, 23 Jan 2013 14:51:47 +0000 (+0100) Subject: Avoid a deadlock when installing a trap policy failed X-Git-Tag: 5.0.2~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4eb09d14e22ee2bccdf02bec3dd99aa533da3b15;p=thirdparty%2Fstrongswan.git Avoid a deadlock when installing a trap policy failed --- diff --git a/src/libcharon/sa/trap_manager.c b/src/libcharon/sa/trap_manager.c index 69b23e1dfa..6c0ae19c70 100644 --- a/src/libcharon/sa/trap_manager.c +++ b/src/libcharon/sa/trap_manager.c @@ -170,8 +170,8 @@ METHOD(trap_manager_t, install, u_int32_t, if (status != SUCCESS) { DBG1(DBG_CFG, "installing trap failed"); - child_sa->destroy(child_sa); reqid = 0; + /* hold off destroying the CHILD_SA until we released the lock */ } else { @@ -184,6 +184,10 @@ METHOD(trap_manager_t, install, u_int32_t, } this->lock->unlock(this->lock); + if (status != SUCCESS) + { + child_sa->destroy(child_sa); + } if (found) { destroy_entry(found);