Slightly change IKE_SA destruction order to inherit properly during ike_rekey task...
authorMartin Willi <martin@revosec.ch>
Mon, 28 Feb 2011 10:31:36 +0000 (10:31 +0000)
committerMartin Willi <martin@revosec.ch>
Mon, 28 Feb 2011 10:31:36 +0000 (10:31 +0000)
src/libcharon/sa/ike_sa.c
src/libcharon/sa/task_manager.c

index 9b6f9d0..2d51786 100644 (file)
@@ -1989,6 +1989,7 @@ METHOD(ike_sa_t, destroy, void,
        charon->bus->set_sa(charon->bus, &this->public);
 
        set_state(this, IKE_DESTROYING);
+       this->task_manager->destroy(this->task_manager);
 
        /* remove attributes first, as we pass the IKE_SA to the handler */
        while (this->attributes->remove_last(this->attributes,
@@ -2006,7 +2007,6 @@ METHOD(ike_sa_t, destroy, void,
        /* unset SA after here to avoid usage by the listeners */
        charon->bus->set_sa(charon->bus, NULL);
 
-       this->task_manager->destroy(this->task_manager);
        this->keymat->destroy(this->keymat);
 
        if (this->my_virtual_ip)
index 9467d15..7b1fef2 100644 (file)
@@ -161,12 +161,12 @@ static void flush(private_task_manager_t *this)
 {
        this->queued_tasks->destroy_offset(this->queued_tasks,
                                                                                offsetof(task_t, destroy));
+       this->queued_tasks = linked_list_create();
        this->passive_tasks->destroy_offset(this->passive_tasks,
                                                                                offsetof(task_t, destroy));
+       this->passive_tasks = linked_list_create();
        this->active_tasks->destroy_offset(this->active_tasks,
                                                                                offsetof(task_t, destroy));
-       this->queued_tasks = linked_list_create();
-       this->passive_tasks = linked_list_create();
        this->active_tasks = linked_list_create();
 }