#include "simgrid/msg.h"
#include "simgrid/simix.h" /* semaphores for the barrier */
-#include <xbt/replay.h>
+#include <xbt/replay.hpp>
XBT_LOG_NEW_DEFAULT_CATEGORY(actions, "Messages specific for this msg example");
int communicator_size = 0;
/* Used to implement irecv+wait */
xbt_dynar_t irecvs; /* of msg_comm_t */
xbt_dynar_t tasks; /* of msg_task_t */
-} s_process_globals_t, *process_globals_t;
+} s_process_globals_t;
+
+typedef s_process_globals_t *process_globals_t;
/* Helper function */
static double parse_double(const char *string)
process_globals_t globals = (process_globals_t) MSG_process_get_data(MSG_process_self());
/* Destroy any isend which correspond to completed communications */
- int found;
msg_comm_t comm;
- while ((found = MSG_comm_testany(globals->isends)) != -1) {
- xbt_dynar_remove_at(globals->isends, found, &comm);
+ while (1/*true*/) {
+ int pos_found = MSG_comm_testany(globals->isends);
+ if (pos_found == -1) /* none remaining */
+ break;
+ xbt_dynar_remove_at(globals->isends, pos_found, &comm);
MSG_comm_destroy(comm);
}
}
ACT_DEBUG("Entering barrier: %s (%d already there)", NAME, processes_arrived_sofar);
simcall_mutex_lock(mutex);
- if (++processes_arrived_sofar == communicator_size) {
+ processes_arrived_sofar++;
+ if (processes_arrived_sofar == communicator_size) {
simcall_cond_broadcast(cond);
simcall_mutex_unlock(mutex);
} else {
const char * process_name = MSG_process_get_name(MSG_process_self());
- char *bcast_identifier = bprintf("bcast_%d", counters->bcast_counter++);
+ char *bcast_identifier = bprintf("bcast_%d", counters->bcast_counter);
+ counters->bcast_counter++;
if (!strcmp(process_name, "p0")) {
XBT_DEBUG("%s: %s is the Root", bcast_identifier, process_name);
int main(int argc, char *argv[])
{
- msg_error_t res = MSG_OK;
-
/* Check the given arguments */
MSG_init(&argc, argv);
/* Explicit initialization of the action module is required now*/
xbt_replay_action_register("compute", action_compute);
/* Actually do the simulation using MSG_action_trace_run */
- res = MSG_action_trace_run(argv[3]); // it's ok to pass a NULL argument here
+ msg_error_t res = MSG_action_trace_run(argv[3]); // it's ok to pass a NULL argument here
XBT_INFO("Simulation time %g", MSG_get_clock());