From 702d0b8f5973b3f1ce01e0f334842a5279fb17d9 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Thu, 1 Aug 2019 22:41:59 +0200 Subject: [PATCH] ActorImpl: postpone the on_destroy signal to the destructor This is to prevent that the SMPI extension gets destroyed too early. The problem is also that this extension is not really an extension but manually handled, but I'll not fix that tonight. --- src/kernel/actor/ActorImpl.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/kernel/actor/ActorImpl.cpp b/src/kernel/actor/ActorImpl.cpp index ab52d77f95..c31407c38c 100644 --- a/src/kernel/actor/ActorImpl.cpp +++ b/src/kernel/actor/ActorImpl.cpp @@ -59,7 +59,11 @@ ActorImpl::ActorImpl(const simgrid::xbt::string& name, s4u::Host* host) : host_( simcall.issuer = this; } -ActorImpl::~ActorImpl() = default; +ActorImpl::~ActorImpl() { + context_->iwannadie = false; // don't let the simcall's yield() do a Context::stop(), to avoid infinite loops + simgrid::simix::simcall([this] { simgrid::s4u::Actor::on_destruction(*ciface()); }); + context_->iwannadie = true; +} /* Become an actor in the simulation * @@ -178,10 +182,6 @@ void ActorImpl::cleanup() } simix_global->mutex.unlock(); - - context_->iwannadie = false; // don't let the simcall's yield() do a Context::stop(), to avoid infinite loops - simgrid::simix::simcall([this] { simgrid::s4u::Actor::on_destruction(*ciface()); }); - context_->iwannadie = true; } void ActorImpl::exit() -- 2.20.1