Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
no more need to pass issuer to suspend
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 5 Sep 2019 11:23:13 +0000 (13:23 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 5 Sep 2019 11:23:13 +0000 (13:23 +0200)
src/kernel/activity/SleepImpl.cpp
src/kernel/actor/ActorImpl.cpp
src/kernel/actor/ActorImpl.hpp
src/plugins/vm/VirtualMachineImpl.cpp
src/s4u/s4u_Actor.cpp

index e20cdf7..dc94cff 100644 (file)
@@ -62,7 +62,7 @@ void SleepImpl::finish()
     if (simcall->issuer_->is_suspended()) {
       XBT_DEBUG("Wait! This process is suspended and can't wake up now.");
       simcall->issuer_->suspended_ = false;
-      simcall->issuer_->suspend(simcall->issuer_);
+      simcall->issuer_->suspend();
     } else {
       simcall->issuer_->simcall_answer();
     }
index e57a46e..4c83228 100644 (file)
@@ -297,7 +297,7 @@ void ActorImpl::yield()
 
     xbt_assert(exception_ == nullptr, "Gasp! This exception may be lost by subsequent calls.");
     suspended_ = false;
-    suspend(this);
+    suspend();
   }
 
   if (exception_ != nullptr) {
@@ -357,7 +357,7 @@ s4u::Actor* ActorImpl::restart()
   return actor->ciface();
 }
 
-void ActorImpl::suspend(ActorImpl* issuer)
+void ActorImpl::suspend()
 {
   if (suspended_) {
     XBT_DEBUG("Actor '%s' is already suspended", get_cname());
index a560305..d0c75f2 100644 (file)
@@ -123,7 +123,7 @@ public:
   void daemonize();
   bool is_suspended() { return suspended_; }
   s4u::Actor* restart();
-  void suspend(ActorImpl* issuer);
+  void suspend();
   void resume();
   activity::ActivityImplPtr join(ActorImpl* actor, double timeout);
   activity::ActivityImplPtr sleep(double duration);
index b7b2002..deecf72 100644 (file)
@@ -185,7 +185,7 @@ void VirtualMachineImpl::suspend(smx_actor_t issuer)
 
   for (auto& smx_process : process_list_) {
     XBT_DEBUG("suspend %s", smx_process.get_cname());
-    smx_process.suspend(issuer);
+    smx_process.suspend();
   }
 
   XBT_DEBUG("suspend all processes on the VM done done");
index 360cc93..5f75e2a 100644 (file)
@@ -190,7 +190,7 @@ void Actor::suspend()
   auto target = pimpl_;
   s4u::Actor::on_suspend(*this);
   kernel::actor::simcall_blocking<void>([issuer, target]() {
-    target->suspend(issuer);
+    target->suspend();
     if (target != issuer) {
       /* If we are suspending ourselves, then just do not finish the simcall now */
       issuer->simcall_answer();
@@ -441,7 +441,9 @@ Host* get_host()
 
 void suspend()
 {
-  SIMIX_process_self()->iface()->suspend();
+  kernel::actor::ActorImpl* self = SIMIX_process_self();
+  s4u::Actor::on_suspend(*self->ciface());
+  kernel::actor::simcall_blocking<void>([self] { self->suspend(); });
 }
 
 void resume()