From 4e98ca18003964f2511d2ba8258c40f9282535c1 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 8 Aug 2012 14:54:03 +0200 Subject: Remove queued IKEv1 message before processing it Avoids destruction or processing of a queued message in recursive process_message() call. --- src/libcharon/sa/ikev1/task_manager_v1.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/libcharon') 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; -- cgit v1.2.3