Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
should solve invalid read issues
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 8 Jul 2016 09:07:14 +0000 (11:07 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 8 Jul 2016 09:07:14 +0000 (11:07 +0200)
src/simdag/sd_global.cpp
src/simdag/sd_task.cpp

index bbcaf36..bb652b3 100644 (file)
@@ -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<SD_task_t>::iterator it=sd_global->executable_tasks->begin();
-       it!=sd_global->executable_tasks->end(); ++it){
+  std::set<SD_task_t>::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);
index 40c8d70..e90ce7d 100644 (file)
@@ -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: