From 8c93aab46d2f1dd9bfff43471ea78a9369aa4762 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Fri, 20 May 2016 17:15:21 +0200 Subject: [PATCH 1/1] [simix] Use the closure-based timer API --- src/simix/libsmx.cpp | 23 ++++++++--------------- src/simix/smx_process.cpp | 9 +++------ src/surf/sg_platf.cpp | 5 ++--- 3 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index aa0a3c42a7..2735d02016 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -520,13 +520,6 @@ void simcall_process_set_data(smx_process_t process, void *data) simgrid::simix::kernel(std::bind(SIMIX_process_set_data, process, data)); } -static void kill_process_from_timer(void* arg) -{ - smx_process_t process = (smx_process_t) arg; - simix_global->kill_process_function(process); - process->kill_timer=NULL; -} - /** * \ingroup simix_process_management * \brief Set the kill time of a process. @@ -534,14 +527,14 @@ static void kill_process_from_timer(void* arg) void simcall_process_set_kill_time(smx_process_t process, double kill_time) { - if (kill_time > SIMIX_get_clock()) { - if (simix_global->kill_process_function) { - XBT_DEBUG("Set kill time %f for process %s(%s)", - kill_time, process->name.c_str(), - sg_host_get_name(process->host)); - process->kill_timer = SIMIX_timer_set(kill_time, kill_process_from_timer, process); - } - } + if (kill_time <= SIMIX_get_clock() || simix_global->kill_process_function == nullptr) + return; + XBT_DEBUG("Set kill time %f for process %s(%s)", + kill_time, process->name.c_str(), sg_host_get_name(process->host)); + process->kill_timer = SIMIX_timer_set(kill_time, [=] { + simix_global->kill_process_function(process); + process->kill_timer=NULL; + }); } /** * \ingroup simix_process_management diff --git a/src/simix/smx_process.cpp b/src/simix/smx_process.cpp index 72651d24e5..84cee3478a 100644 --- a/src/simix/smx_process.cpp +++ b/src/simix/smx_process.cpp @@ -217,11 +217,6 @@ void* simcall_HANDLER_process_create( return res; } -static void kill_process(void* process) -{ - simix_global->kill_process_function((smx_process_t) process); -} - /** * \brief Internal function to create a process. * @@ -315,7 +310,9 @@ smx_process_t SIMIX_process_create( if (kill_time > SIMIX_get_clock() && simix_global->kill_process_function) { XBT_DEBUG("Process %s(%s) will be kill at time %f", process->name.c_str(), sg_host_get_name(process->host), kill_time); - process->kill_timer = SIMIX_timer_set(kill_time, kill_process, process); + process->kill_timer = SIMIX_timer_set(kill_time, [=]() { + simix_global->kill_process_function(process); + }); } /* Tracing the process creation */ diff --git a/src/surf/sg_platf.cpp b/src/surf/sg_platf.cpp index 5f7f50d686..144002f746 100644 --- a/src/surf/sg_platf.cpp +++ b/src/surf/sg_platf.cpp @@ -601,8 +601,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) XBT_DEBUG("Process %s(%s) will be started at time %f", arg->name.c_str(), arg->hostname, start_time); - SIMIX_timer_set(start_time, [](void* p) { - smx_process_arg_t arg = static_cast(p); + SIMIX_timer_set(start_time, [=]() { simix_global->create_process_function( arg->name.c_str(), std::move(arg->code), @@ -613,7 +612,7 @@ void sg_platf_new_process(sg_platf_process_cbarg_t process) arg->auto_restart, NULL); delete arg; - }, arg); + }); } else { // start_time <= SIMIX_get_clock() XBT_DEBUG("Starting Process %s(%s) right now", arg->name.c_str(), sg_host_get_name(host)); -- 2.20.1