static int victim(int argc, char *argv[]) {
xbt_ex_t e;
- XBT_INFO("Let's get suspended.");
+ msg_error_t res = MSG_OK;
+
+ XBT_INFO("Let's work.");
TRY {
- MSG_process_suspend(MSG_process_self());
+ res = MSG_task_execute(MSG_task_create("Task", 1e14, 0, NULL));
+ if (res != MSG_OK) {
+ XBT_INFO("The MSG_task_execute caught the exception for me and returned %d)",res);
+ } else {
+ xbt_die("I was expecting an exception during my execution!");
+ }
} CATCH(e) {
XBT_INFO("The received exception resumed my execution. Good. Here is it: ----------------------->8----");
xbt_ex_display(&e);
xbt_ex_free(e);
}
- msg_error_t res = MSG_OK;
+
+ XBT_INFO("Let's get suspended.");
int gotit = 0;
+ TRY {
+ MSG_process_suspend(MSG_process_self());
+ } CATCH(e) {
+ XBT_INFO("The received exception resumed my suspension. Good. Here is it: ----------------------->8----");
+ xbt_ex_display(&e);
+ XBT_INFO("(end of the second exception) ----8<------------------------");
+ gotit = 1;
+ xbt_ex_free(e);
+ }
+ if(!gotit) {
+ xbt_die("I was expecting an exception during my suspension!");
+ }
+
XBT_INFO("Let's sleep for 10 seconds.");
TRY {
res = MSG_process_sleep(10);
+ if (res != MSG_OK) {
+ XBT_INFO("The MSG_process_sleep caught the exception for me and returned %d)",res);
+ } else {
+ xbt_die("I was expecting to get an exception during my nap.");
+ }
} CATCH(e) {
XBT_INFO("Got the second exception: ----------------------->8----");
xbt_ex_display(&e);
- XBT_INFO("(end of the second exception) ----8<------------------------");
+ XBT_INFO("(end of the third exception) ----8<------------------------");
xbt_ex_free(e);
}
- if (res != MSG_TASK_CANCELED)
- xbt_die("Sleep action not canceled through the exception. This is not a method. (retval: %d)",res);
- if (!gotit)
- xbt_die("I was expecting to get an exception during my nap.");
- XBT_INFO("My little nap got canceled through a raw exception. Excellent.");
+ XBT_INFO("Let's try a last time to do something on something");
+ MSG_process_sleep(10);
XBT_INFO("That's enough now. I quit.");
+
return 0;
}
XBT_INFO("Let's create a victim.");
victim_process = MSG_process_create("victim", victim, NULL, MSG_host_self());
+
+ XBT_INFO("Going to sleep for 1 second");
if (MSG_process_sleep(1) != MSG_OK)
xbt_die("What's going on??? I failed to sleep!");
XBT_INFO("Send a first exception (host failure)");
- SIMIX_process_throw(victim_process, host_error, 0, "Let's pretend that the host failed");
+ SIMIX_process_throw(victim_process, host_error, 0, "First Trick: Let's pretend that the host failed");
+
+
+ XBT_INFO("Sweet, let's prepare a second trick!");
+ XBT_INFO("Going to sleep for 2 seconds");
+
+ if (MSG_process_sleep(2) != MSG_OK)
+ xbt_die("What's going on??? I failed to sleep!");
+ XBT_INFO("Send a second exception (host failure)");
+ SIMIX_process_throw(victim_process, host_error, 0, "Second Trick: Let's pretend again that the host failed");
+
+ XBT_INFO("Sweet, let's prepare a third trick!");
+ XBT_INFO("Going to sleep for 3 seconds");
if (MSG_process_sleep(3) != MSG_OK)
xbt_die("What's going on??? I failed to sleep!");
- XBT_INFO("Send a second exception (cancellation)");
- SIMIX_process_throw(victim_process, cancel_error, 0, "Let's pretend this time that someone canceled something");
+ XBT_INFO("Send a third exception (cancellation)");
+ SIMIX_process_throw(victim_process, cancel_error, 0, "Third Trick: Let's pretend this time that someone canceled something");
XBT_INFO("OK, goodbye now.");
return 0;