diff options
author | Martin Willi <martin@revosec.ch> | 2012-08-08 14:54:03 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-08-08 14:54:03 +0200 |
commit | 4e98ca18003964f2511d2ba8258c40f9282535c1 (patch) | |
tree | a2d67368aa02865aef13aa6e4cf78c9237bd9fb6 /src | |
parent | 6204c1182d4b14f76e9b51fd0a2108c98464c49a (diff) | |
download | strongswan-4e98ca18003964f2511d2ba8258c40f9282535c1.tar.bz2 strongswan-4e98ca18003964f2511d2ba8258c40f9282535c1.tar.xz |
Remove queued IKEv1 message before processing it
Avoids destruction or processing of a queued message in
recursive process_message() call.
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/sa/ikev1/task_manager_v1.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/libcharon/sa/ikev1/task_manager_v1.c b/src/libcharon/sa/ikev1/task_manager_v1.c index d71f540fe..3c84b5114 100644 --- a/src/libcharon/sa/ikev1/task_manager_v1.c +++ b/src/libcharon/sa/ikev1/task_manager_v1.c @@ -962,6 +962,7 @@ static status_t process_response(private_task_manager_t *this, message_t *message) { enumerator_t *enumerator; + message_t *queued; status_t status; task_t *task; @@ -1010,10 +1011,11 @@ static status_t process_response(private_task_manager_t *this, if (this->queued && this->active_tasks->get_count(this->active_tasks) == 0) { - status = this->public.task_manager.process_message( - &this->public.task_manager, this->queued); - this->queued->destroy(this->queued); + queued = this->queued; this->queued = NULL; + status = this->public.task_manager.process_message( + &this->public.task_manager, queued); + queued->destroy(queued); if (status == DESTROY_ME) { return status; |