]> AND Public Git Repository - simgrid.git/blobdiff - src/smpi/smpi_base.c
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
apparently we can't just pop items off the cond_list for each action any more.
[simgrid.git] / src / smpi / smpi_base.c
index fe5f2e6d6f1e5132378d74fc01271d76dbeb986b..ad53360abb47bc9852c71dc6cfa99e108154c28e 100644 (file)
@@ -121,7 +121,7 @@ int smpi_sender(int argc, char **argv)
 
                        SIMIX_register_action_to_condition(communicate_action, request->cond);
                        SIMIX_cond_wait(request->cond, request->mutex);
-                       SIMIX_unregister_action_to_condition(communicate_action, request->cond);
+                       //SIMIX_unregister_action_to_condition(communicate_action, request->cond);
 
                        SIMIX_mutex_unlock(request->mutex);
 
@@ -414,6 +414,7 @@ void smpi_global_destroy()
 
 int smpi_run_simulation(int argc, char **argv)
 {
+       xbt_fifo_item_t cond_item   = NULL;
        smx_cond_t   cond           = NULL;
        smx_action_t action         = NULL;
 
@@ -447,15 +448,17 @@ int smpi_run_simulation(int argc, char **argv)
        while (SIMIX_solve(actions_done, actions_failed) != -1.0) {
                while ((action = xbt_fifo_pop(actions_failed))) {
                        DEBUG1("** %s failed **", action->name);
-                       while ((cond = xbt_fifo_pop(action->cond_list))) {
+                       xbt_fifo_foreach(action->cond_list, cond_item, cond, smx_cond_t) {
                                SIMIX_cond_broadcast(cond);
+                               SIMIX_unregister_action_to_condition(action, cond);
                        }
                        SIMIX_action_destroy(action);
                }
                while ((action = xbt_fifo_pop(actions_done))) {
                        DEBUG1("** %s done **",action->name);
-                       while ((cond = xbt_fifo_pop(action->cond_list))) {
+                       xbt_fifo_foreach(action->cond_list, cond_item, cond, smx_cond_t) {
                                SIMIX_cond_broadcast(cond);
+                               SIMIX_unregister_action_to_condition(action, cond);
                        }
                        SIMIX_action_destroy(action);
                }
@@ -640,7 +643,7 @@ void smpi_bench_end()
        SIMIX_mutex_lock(mutex);
        SIMIX_register_action_to_condition(compute_action, cond);
        SIMIX_cond_wait(cond, mutex);
-       SIMIX_unregister_action_to_condition(compute_action, cond);
+       //SIMIX_unregister_action_to_condition(compute_action, cond);
        SIMIX_mutex_unlock(mutex);
 
        SIMIX_mutex_destroy(mutex);
@@ -792,7 +795,7 @@ unsigned int smpi_sleep(unsigned int seconds)
        SIMIX_mutex_lock(mutex);
        SIMIX_register_action_to_condition(sleep_action, cond);
        SIMIX_cond_wait(cond, mutex);
-       SIMIX_unregister_action_to_condition(sleep_action, cond);
+       //SIMIX_unregister_action_to_condition(sleep_action, cond);
        SIMIX_mutex_unlock(mutex);
 
        SIMIX_mutex_destroy(mutex);