aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-04-11 17:43:30 +0200
committerMartin Willi <martin@revosec.ch>2012-04-11 17:45:12 +0200
commit10f24e659918ae799bdcc1def142bce565309699 (patch)
tree35c85b6cdcb0ce447d06f82c03ae80d744fcc1eb /src
parent4ef867f57840ab8c276ddabc99505024c6d54725 (diff)
downloadstrongswan-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.c11
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;