From d07e7725e5403b21d0cfab0a8fea8a1f30fcc8bf Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Fri, 8 Jul 2016 11:07:14 +0200 Subject: [PATCH] should solve invalid read issues --- src/simdag/sd_global.cpp | 5 +++-- src/simdag/sd_task.cpp | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/simdag/sd_global.cpp b/src/simdag/sd_global.cpp index bbcaf36901..bb652b3dce 100644 --- a/src/simdag/sd_global.cpp +++ b/src/simdag/sd_global.cpp @@ -129,9 +129,10 @@ xbt_dynar_t SD_simulate(double how_long) { xbt_dynar_reset(sd_global->return_set); /* explore the runnable tasks */ - for (std::set::iterator it=sd_global->executable_tasks->begin(); - it!=sd_global->executable_tasks->end(); ++it){ + std::set::iterator it=sd_global->executable_tasks->begin(); + while(it != sd_global->executable_tasks->end()){ task = *it; + it++; XBT_VERB("Executing task '%s'", SD_task_get_name(task)); SD_task_run(task); xbt_dynar_push(sd_global->return_set, &task); diff --git a/src/simdag/sd_task.cpp b/src/simdag/sd_task.cpp index 40c8d702b4..e90ce7d9d7 100644 --- a/src/simdag/sd_task.cpp +++ b/src/simdag/sd_task.cpp @@ -330,15 +330,15 @@ void SD_task_set_state(SD_task_t task, e_SD_task_state_t new_state) break; case SD_SCHEDULED: if (SD_task_get_state(task) == SD_RUNNABLE){ - sd_global->executable_tasks->erase(task); sd_global->initial_tasks->insert(task); + sd_global->executable_tasks->erase(task); } break; case SD_RUNNABLE: idx = std::find(sd_global->initial_tasks->begin(), sd_global->initial_tasks->end(), task); if (idx != sd_global->initial_tasks->end()) { - sd_global->initial_tasks->erase(idx); sd_global->executable_tasks->insert(*idx); + sd_global->initial_tasks->erase(idx); } break; case SD_RUNNING: -- 2.20.1