From 1a8d138682dfb8b1f97c7b3327c83c58015d69bf Mon Sep 17 00:00:00 2001 From: Christian Heinrich Date: Mon, 26 Mar 2018 17:33:31 +0200 Subject: [PATCH] [SMPI] Replay: Use std::bind / std::function for the wait action --- src/smpi/internals/smpi_replay.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index ad2f04fe97..e8630b994a 100644 --- a/src/smpi/internals/smpi_replay.cpp +++ b/src/smpi/internals/smpi_replay.cpp @@ -101,13 +101,14 @@ protected: int my_proc_id; public: - explicit ReplayAction(std::string name) - : name(name), start_time(smpi_process()->simulated_elapsed()), my_proc_id(simgrid::s4u::Actor::self()->getPid()) + explicit ReplayAction(std::string name) : name(name), start_time(0), my_proc_id(simgrid::s4u::Actor::self()->getPid()) { } virtual void execute(simgrid::xbt::ReplayAction& action) { + // Needs to be re-initialized for every action, hence here + start_time = smpi_process()->simulated_elapsed(); args.parse(action); kernel(action); log_timed_action(action, start_time); @@ -311,11 +312,6 @@ static void action_test(simgrid::xbt::ReplayAction& action) log_timed_action (action, clock); } -static void action_wait(simgrid::xbt::ReplayAction& action) -{ - Replay::WaitAction().execute(action); -} - static void action_waitall(simgrid::xbt::ReplayAction& action) { CHECK_ACTION_PARAMS(action, 0, 0) @@ -831,7 +827,9 @@ void smpi_replay_init(int* argc, char*** argv) xbt_replay_action_register("recv", simgrid::smpi::action_recv); xbt_replay_action_register("Irecv", simgrid::smpi::action_Irecv); xbt_replay_action_register("test", simgrid::smpi::action_test); - xbt_replay_action_register("wait", simgrid::smpi::action_wait); + std::shared_ptr wait(new simgrid::smpi::Replay::WaitAction()); + xbt_replay_action_register("wait", + std::bind(&simgrid::smpi::Replay::WaitAction::execute, wait, std::placeholders::_1)); xbt_replay_action_register("waitAll", simgrid::smpi::action_waitall); xbt_replay_action_register("barrier", simgrid::smpi::action_barrier); xbt_replay_action_register("bcast", simgrid::smpi::action_bcast); -- 2.20.1