Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix platform...
[simgrid.git] / src / smpi / smpi_base.c
index c2d0939..ad53360 100644 (file)
@@ -8,7 +8,7 @@ SMPI_Global_t     smpi_global     = NULL;
 
 SMPI_MPI_Global_t smpi_mpi_global = NULL;
 
-XBT_LOG_NEW_DEFAULT_CATEGORY(smpi, "SMPI");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi,XBT_LOG_ROOT_CAT, "All SMPI categories (see \ref SMPI_API)");
 
 int inline smpi_mpi_comm_size(smpi_mpi_communicator_t *comm)
 {
@@ -119,10 +119,9 @@ int smpi_sender(int argc, char **argv)
                        communicate_action = SIMIX_action_communicate(shost, dhost,
                                NULL, request->datatype->size * request->count * 1.0, -1.0);
 
-                       SIMIX_register_condition_to_action(communicate_action, request->cond);
                        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_mutex_unlock(request->mutex);
 
@@ -415,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;
 
@@ -448,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);
                }
@@ -638,10 +640,10 @@ void smpi_bench_end()
        mutex          = SIMIX_mutex_init();
        cond           = SIMIX_cond_init();
 
-       SIMIX_register_condition_to_action(compute_action, cond);
-       SIMIX_register_action_to_condition(compute_action, cond);
        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_mutex_unlock(mutex);
 
        SIMIX_mutex_destroy(mutex);
@@ -790,10 +792,10 @@ unsigned int smpi_sleep(unsigned int seconds)
        mutex        = SIMIX_mutex_init();
        cond         = SIMIX_cond_init();
 
-       SIMIX_register_condition_to_action(sleep_action, cond);
-       SIMIX_register_action_to_condition(sleep_action, cond);
        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_mutex_unlock(mutex);
 
        SIMIX_mutex_destroy(mutex);