Use enumerator for queued_tasks migration to avoid infinite loop

This commit is contained in:
Thomas Egerer 2010-06-30 13:10:56 +02:00 committed by Martin Willi
parent c177076b50
commit 31d0efd7e9
1 changed files with 5 additions and 3 deletions

View File

@ -986,6 +986,7 @@ METHOD(task_manager_t, busy, bool,
METHOD(task_manager_t, reset, void,
private_task_manager_t *this, u_int32_t initiate, u_int32_t respond)
{
enumerator_t *enumerator;
task_t *task;
/* reset message counters and retransmit packets */
@ -1004,12 +1005,13 @@ METHOD(task_manager_t, reset, void,
this->initiating.type = EXCHANGE_TYPE_UNDEFINED;
/* reset queued tasks */
while (this->queued_tasks->remove_last(this->queued_tasks,
(void**)&task) == SUCCESS)
enumerator = this->queued_tasks->create_enumerator(this->queued_tasks);
while (enumerator->enumerate(enumerator, &task))
{
task->migrate(task, this->ike_sa);
this->queued_tasks->insert_first(this->queued_tasks, task);
}
enumerator->destroy(enumerator);
/* reset active tasks */
while (this->active_tasks->remove_last(this->active_tasks,
(void**)&task) == SUCCESS)