XBT_PUBLIC(void) SIMIX_cond_broadcast(smx_cond_t cond);
XBT_PUBLIC(void) SIMIX_cond_destroy(smx_cond_t cond);
XBT_PUBLIC(xbt_fifo_t) SIMIX_cond_get_actions(smx_cond_t cond);
-
+XBT_PUBLIC(void) SIMIX_cond_display_info(smx_cond_t cond);
/************************** Action handling ************************************/
XBT_PUBLIC(smx_action_t) SIMIX_action_communicate(smx_host_t sender,smx_host_t receiver, const char *name,
}
}
- xbt_assert1(!MSG_mailbox_get_cond(mailbox),
- "A process is already blocked on the channel %s",
+ if (MSG_mailbox_get_cond(mailbox)) {
+ CRITICAL1("A process is already blocked on the channel %s",
MSG_mailbox_get_alias(mailbox));
+ SIMIX_cond_display_info(MSG_mailbox_get_cond(mailbox));
+ xbt_die("Go fix your code!");
+ }
cond = SIMIX_cond_init();
return;
}
}
+
+void SIMIX_cond_display_info(smx_cond_t cond)
+{
+ if (cond == NULL)
+ return;
+ else {
+ smx_process_t process = NULL;
+
+ INFO0("Blocked process on this condition:");
+ xbt_swag_foreach(process,cond->sleeping) {
+ INFO2("\t %s running on host %s",process->name,process->simdata->smx_host->name);
+ }
+ }
+}