XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_actor_kill, "Messages specific for this s4u example");
-static int on_exit(void*, void*)
-{
- XBT_INFO("I have been killed!");
- return 0;
-}
-
static void victimA_fun()
{
- simgrid::s4u::this_actor::on_exit(on_exit, nullptr);
+ simgrid::s4u::this_actor::on_exit([](int, void*) { XBT_INFO("I have been killed!"); }, nullptr);
XBT_INFO("Hello!");
XBT_INFO("Suspending myself");
simgrid::s4u::this_actor::suspend(); /* - Start by suspending itself */
XBT_LOG_NEW_DEFAULT_CATEGORY(test, "Messages specific for this s4u example");
/* Executed on process termination, to display a message helping to understand the output */
-static int my_onexit(void*, void*)
+static void my_onexit(int, void*)
{
XBT_INFO("Exiting now (done sleeping or got killed).");
- return 0;
}
/* Just sleep until termination */
TRACE_paje_dump_buffer(true);
}
-static void TRACE_actor_kill(smx_process_exit_status_t status, simgrid::s4u::Actor* actor)
-{
- if (status == SMX_EXIT_FAILURE)
- // kill means that this actor no longer exists, let's destroy it
- simgrid::instr::Container::by_name(instr_pid(actor))->remove_from_parent();
-}
-
static void instr_actor_on_creation(simgrid::s4u::ActorPtr actor)
{
container_t root = simgrid::instr::Container::get_root();
root->type_->by_name_or_create("ACTOR_LINK", actor_type, actor_type);
root->type_->by_name_or_create("ACTOR_TASK_LINK", actor_type, actor_type);
- actor->on_exit((int_f_pvoid_pvoid_t)TRACE_actor_kill, actor->get_impl());
+ actor->on_exit(
+ [](int status, void* actor) {
+ if (status == SMX_EXIT_FAILURE)
+ // kill means that this actor no longer exists, let's destroy it
+ simgrid::instr::Container::by_name(instr_pid(static_cast<simgrid::s4u::Actor*>(actor)))->remove_from_parent();
+ },
+ actor->get_impl());
}
static long long int counter = 0;
* You should use them to free the data used by your process.
*/
void MSG_process_on_exit(int_f_pvoid_pvoid_t fun, void *data) {
- simgrid::s4u::this_actor::on_exit(fun, data);
+ simgrid::s4u::this_actor::on_exit([fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data);
}
/** @ingroup m_process_management
XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this msg example");
-static int my_onexit(smx_process_exit_status_t /*status*/, int* pid)
-{
- XBT_INFO("Process \"%d\" killed.", *pid);
- return 0;
-}
-
static void sendpid()
{
simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::by_name("mailbox");
int pid = simgrid::s4u::this_actor::get_pid();
double comm_size = 100000;
- simgrid::s4u::this_actor::on_exit((int_f_pvoid_pvoid_t)my_onexit, &pid);
+ simgrid::s4u::this_actor::on_exit([](int, void* pid) { XBT_INFO("Process \"%d\" killed.", *(int*)pid); }, &pid);
XBT_INFO("Sending pid of \"%d\".", pid);
mailbox->put(&pid, comm_size);