diff options
author | Tobias Brunner <tobias@strongswan.org> | 2013-01-23 15:51:47 +0100 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-01-23 15:51:47 +0100 |
commit | 4eb09d14e22ee2bccdf02bec3dd99aa533da3b15 (patch) | |
tree | b9a00aeb5c178927e03ee187fc4c66bda7d7a5ff /src/libcharon | |
parent | 8d631ebabd557b23649a4266f3bc3658f01e076c (diff) | |
download | strongswan-4eb09d14e22ee2bccdf02bec3dd99aa533da3b15.tar.bz2 strongswan-4eb09d14e22ee2bccdf02bec3dd99aa533da3b15.tar.xz |
Avoid a deadlock when installing a trap policy failed
Diffstat (limited to 'src/libcharon')
-rw-r--r-- | src/libcharon/sa/trap_manager.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/libcharon/sa/trap_manager.c b/src/libcharon/sa/trap_manager.c index 69b23e1df..6c0ae19c7 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); |