From 4b41294c49f838248cf4b8e6883ddd94dfdf72d9 Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Fri, 21 Jul 2017 14:57:16 +0200 Subject: [PATCH] simplify process/actor restart --- include/simgrid/s4u/Actor.hpp | 1 + src/msg/msg_process.cpp | 3 +-- src/s4u/s4u_actor.cpp | 5 +++++ src/simix/ActorImpl.cpp | 6 +++--- src/simix/ActorImpl.hpp | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/include/simgrid/s4u/Actor.hpp b/include/simgrid/s4u/Actor.hpp index 2560aa9a3b..eef1611123 100644 --- a/include/simgrid/s4u/Actor.hpp +++ b/include/simgrid/s4u/Actor.hpp @@ -269,6 +269,7 @@ public: /** Retrieve the property value (or nullptr if not set) */ const char* getProperty(const char* key); void setProperty(const char* key, const char* value); + Actor* restart(); }; /** @ingroup s4u_api diff --git a/src/msg/msg_process.cpp b/src/msg/msg_process.cpp index e1ee3c74b2..17b20f9f10 100644 --- a/src/msg/msg_process.cpp +++ b/src/msg/msg_process.cpp @@ -471,8 +471,7 @@ XBT_PUBLIC(void) MSG_process_auto_restart_set(msg_process_t process, int auto_re * \brief Restarts a process from the beginning. */ XBT_PUBLIC(msg_process_t) MSG_process_restart(msg_process_t process) { - return simgrid::simix::kernelImmediate( - [process]() { return process->getImpl()->restart(process->getImpl())->ciface(); }); + return process->restart(); } /** @ingroup m_process_management diff --git a/src/s4u/s4u_actor.cpp b/src/s4u/s4u_actor.cpp index 01ca722e9b..6b6f2ef5d8 100644 --- a/src/s4u/s4u_actor.cpp +++ b/src/s4u/s4u_actor.cpp @@ -184,6 +184,11 @@ void Actor::setProperty(const char* key, const char* value) }); } +Actor* Actor::restart() +{ + return simgrid::simix::kernelImmediate([this]() { return pimpl_->restart(); }); +} + // ***** this_actor ***** namespace this_actor { diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index a33bfacc73..25902cea16 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -167,7 +167,7 @@ void ActorImpl::daemonize() } } -ActorImpl* ActorImpl::restart(ActorImpl* issuer) +simgrid::s4u::Actor* ActorImpl::restart() { XBT_DEBUG("Restarting process %s on %s", cname(), host->getCname()); @@ -183,7 +183,7 @@ ActorImpl* ActorImpl::restart(ActorImpl* issuer) arg.auto_restart = auto_restart; // kill the old process - SIMIX_process_kill(this, issuer); + SIMIX_process_kill(this, this); // start the new process ActorImpl* actor = simix_global->create_process_function(arg.name.c_str(), std::move(arg.code), arg.data, arg.host, @@ -193,7 +193,7 @@ ActorImpl* ActorImpl::restart(ActorImpl* issuer) if (arg.auto_restart) actor->auto_restart = arg.auto_restart; - return actor; + return actor->ciface(); } smx_activity_t ActorImpl::suspend(ActorImpl* issuer) diff --git a/src/simix/ActorImpl.hpp b/src/simix/ActorImpl.hpp index 6baac2c810..952546bae0 100644 --- a/src/simix/ActorImpl.hpp +++ b/src/simix/ActorImpl.hpp @@ -106,7 +106,7 @@ public: void daemonize(); bool isDaemon() { return daemon; } /** Whether this actor has been daemonized */ bool isSuspended() { return suspended; } - ActorImpl* restart(ActorImpl* issuer); + simgrid::s4u::Actor* restart(); smx_activity_t suspend(ActorImpl* issuer); void resume(); smx_activity_t sleep(double duration); -- 2.20.1