aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-08-08 14:54:03 +0200
committerMartin Willi <martin@revosec.ch>2012-08-08 14:54:03 +0200
commit4e98ca18003964f2511d2ba8258c40f9282535c1 (patch)
treea2d67368aa02865aef13aa6e4cf78c9237bd9fb6 /src
parent6204c1182d4b14f76e9b51fd0a2108c98464c49a (diff)
downloadstrongswan-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.c8
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;