#define FINALIZE ((void*)221297) /* a magic number to tell people to stop working */
+static void task_cleanup_handler(void* task)
+{
+ if (task)
+ MSG_task_destroy(task);
+}
+
static int master(int argc, char *argv[])
{
+ xbt_assert(argc == 5);
long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");
double task_comp_size = xbt_str_parse_double(argv[2], "Invalid computational size: %s");
double task_comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s");
char mailbox[256];
snprintf(mailbox, 255, "worker-%ld", i % workers_count);
XBT_INFO("Send a message to %s", mailbox);
- msg_task_t task = MSG_task_create("Task", task_comp_size, task_comm_size, xbt_new0(double, 1));
- *((double *) task->data) = MSG_get_clock();
+ msg_task_t task = MSG_task_create("Task", task_comp_size, task_comm_size, NULL);
switch ( MSG_task_send_with_timeout(task,mailbox,10.0) ) {
case MSG_OK:
XBT_INFO("Send to %s completed", mailbox);
break;
- case MSG_HOST_FAILURE:
- XBT_INFO("Gloups. The cpu on which I'm running just turned off!. See you!");
- free(task->data);
- MSG_task_destroy(task);
- return 0;
-
case MSG_TRANSFER_FAILURE:
- XBT_INFO("Mmh. Something went wrong with '%s'. Nevermind. Let's keep going!", mailbox);
- free(task->data);
+ XBT_INFO("Mmh. The communication with '%s' failed. Nevermind. Let's keep going!", mailbox);
MSG_task_destroy(task);
break;
case MSG_TIMEOUT:
XBT_INFO ("Mmh. Got timeouted while speaking to '%s'. Nevermind. Let's keep going!", mailbox);
- free(task->data);
MSG_task_destroy(task);
break;
msg_task_t task = MSG_task_create("finalize", 0, 0, FINALIZE);
switch (MSG_task_send_with_timeout(task,mailbox,1.0)) {
- case MSG_HOST_FAILURE:
- XBT_INFO("Gloups. The cpu on which I'm running just turned off!. See you!");
- MSG_task_destroy(task);
- break;
case MSG_TRANSFER_FAILURE:
XBT_INFO("Mmh. Can't reach '%s'! Nevermind. Let's keep going!", mailbox);
static int worker(int argc, char *argv[])
{
+ xbt_assert(argc == 2);
char mailbox[80];
long id= xbt_str_parse_int(argv[1], "Invalid argument %s");
break;
}
XBT_INFO("Start execution...");
+ MSG_process_set_data(MSG_process_self(), task);
retcode = MSG_task_execute(task);
+ MSG_process_set_data(MSG_process_self(), NULL);
if (retcode == MSG_OK) {
XBT_INFO("Execution complete.");
- free(task->data);
- MSG_task_destroy(task);
- } else if (retcode == MSG_HOST_FAILURE) {
- XBT_INFO("Gloups. The cpu on which I'm running just turned off!. See you!");
- free(task->data);
MSG_task_destroy(task);
- return 0;
} else {
XBT_INFO("Hey ?! What's up ? ");
xbt_die("Unexpected behavior");
}
- } else if (retcode == MSG_HOST_FAILURE) {
- XBT_INFO("Gloups. The cpu on which I'm running just turned off!. See you!");
- return 0;
} else if (retcode == MSG_TRANSFER_FAILURE) {
XBT_INFO("Mmh. Something went wrong. Nevermind. Let's keep going!");
} else {
MSG_function_register("master", master);
MSG_function_register("worker", worker);
+ MSG_process_set_data_cleanup(task_cleanup_handler);
MSG_launch_application(argv[2]);
msg_error_t res = MSG_main();