controller: clean up job data if a thread gets cancelled waiting in a function

Controller functions are thread cancellation points, so register a cancellation
handler cleaning up job data.
This commit is contained in:
Martin Willi 2013-03-26 16:19:00 +01:00
parent 2baa7bbedb
commit 5e9144a21f
1 changed files with 6 additions and 3 deletions

View File

@ -412,6 +412,7 @@ METHOD(controller_t, initiate, status_t,
.refcount = 1,
);
job->listener.logger.listener = &job->listener;
thread_cleanup_push((void*)destroy_job, job);
if (callback == NULL)
{
@ -425,7 +426,7 @@ METHOD(controller_t, initiate, status_t,
}
}
status = job->listener.status;
destroy_job(job);
thread_cleanup_pop(TRUE);
return status;
}
@ -500,6 +501,7 @@ METHOD(controller_t, terminate_ike, status_t,
.refcount = 1,
);
job->listener.logger.listener = &job->listener;
thread_cleanup_push((void*)destroy_job, job);
if (callback == NULL)
{
@ -513,7 +515,7 @@ METHOD(controller_t, terminate_ike, status_t,
}
}
status = job->listener.status;
destroy_job(job);
thread_cleanup_pop(TRUE);
return status;
}
@ -615,6 +617,7 @@ METHOD(controller_t, terminate_child, status_t,
.refcount = 1,
);
job->listener.logger.listener = &job->listener;
thread_cleanup_push((void*)destroy_job, job);
if (callback == NULL)
{
@ -628,7 +631,7 @@ METHOD(controller_t, terminate_child, status_t,
}
}
status = job->listener.status;
destroy_job(job);
thread_cleanup_pop(TRUE);
return status;
}