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)
{
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);
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;
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);
}
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);
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);