]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Don't invoke child_updown hook twice as responder
authorMartin Willi <martin@revosec.ch>
Wed, 11 Apr 2012 15:43:30 +0000 (17:43 +0200)
committerMartin Willi <martin@revosec.ch>
Wed, 11 Apr 2012 15:45:12 +0000 (17:45 +0200)
src/libcharon/sa/task_manager.c

index 77d36f975fe6c481b958a55c2682371b82705034..022a5e3d604d92afffe15e3ada118abe0ddac715 100644 (file)
@@ -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;