diff options
author | Martin Willi <martin@revosec.ch> | 2012-04-11 17:43:30 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-04-11 17:45:12 +0200 |
commit | 10f24e659918ae799bdcc1def142bce565309699 (patch) | |
tree | 35c85b6cdcb0ce447d06f82c03ae80d744fcc1eb /src | |
parent | 4ef867f57840ab8c276ddabc99505024c6d54725 (diff) | |
download | strongswan-10f24e659918ae799bdcc1def142bce565309699.tar.bz2 strongswan-10f24e659918ae799bdcc1def142bce565309699.tar.xz |
Don't invoke child_updown hook twice as responder
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/task_manager.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libcharon/sa/task_manager.c b/src/libcharon/sa/task_manager.c index 77d36f975..022a5e3d6 100644 --- a/src/libcharon/sa/task_manager.c +++ b/src/libcharon/sa/task_manager.c @@ -606,7 +606,7 @@ static status_t build_response(private_task_manager_t *this, message_t *request) task_t *task; message_t *message; host_t *me, *other; - bool delete = FALSE; + bool delete = FALSE, hook = FALSE; status_t status; me = request->get_destination(request); @@ -641,9 +641,11 @@ static status_t build_response(private_task_manager_t *this, message_t *request) enumerator); } break; - case DESTROY_ME: case FAILED: default: + hook = TRUE; + /* FALL */ + case DESTROY_ME: /* destroy IKE_SA, but SEND response first */ delete = TRUE; break; @@ -678,7 +680,10 @@ static status_t build_response(private_task_manager_t *this, message_t *request) this->responding.packet->clone(this->responding.packet)); if (delete) { - charon->bus->ike_updown(charon->bus, this->ike_sa, FALSE); + if (hook) + { + charon->bus->ike_updown(charon->bus, this->ike_sa, FALSE); + } return DESTROY_ME; } return SUCCESS; |