Use enumerator for queued_tasks migration to avoid infinite loop
This commit is contained in:
committed by
Martin Willi
parent
c177076b50
commit
31d0efd7e9
@@ -986,6 +986,7 @@ METHOD(task_manager_t, busy, bool,
|
|||||||
METHOD(task_manager_t, reset, void,
|
METHOD(task_manager_t, reset, void,
|
||||||
private_task_manager_t *this, u_int32_t initiate, u_int32_t respond)
|
private_task_manager_t *this, u_int32_t initiate, u_int32_t respond)
|
||||||
{
|
{
|
||||||
|
enumerator_t *enumerator;
|
||||||
task_t *task;
|
task_t *task;
|
||||||
|
|
||||||
/* reset message counters and retransmit packets */
|
/* reset message counters and retransmit packets */
|
||||||
@@ -1004,12 +1005,13 @@ METHOD(task_manager_t, reset, void,
|
|||||||
this->initiating.type = EXCHANGE_TYPE_UNDEFINED;
|
this->initiating.type = EXCHANGE_TYPE_UNDEFINED;
|
||||||
|
|
||||||
/* reset queued tasks */
|
/* reset queued tasks */
|
||||||
while (this->queued_tasks->remove_last(this->queued_tasks,
|
enumerator = this->queued_tasks->create_enumerator(this->queued_tasks);
|
||||||
(void**)&task) == SUCCESS)
|
while (enumerator->enumerate(enumerator, &task))
|
||||||
{
|
{
|
||||||
task->migrate(task, this->ike_sa);
|
task->migrate(task, this->ike_sa);
|
||||||
this->queued_tasks->insert_first(this->queued_tasks, task);
|
|
||||||
}
|
}
|
||||||
|
enumerator->destroy(enumerator);
|
||||||
|
|
||||||
/* reset active tasks */
|
/* reset active tasks */
|
||||||
while (this->active_tasks->remove_last(this->active_tasks,
|
while (this->active_tasks->remove_last(this->active_tasks,
|
||||||
(void**)&task) == SUCCESS)
|
(void**)&task) == SUCCESS)
|
||||||
|
|||||||
Reference in New Issue
Block a user