X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2e149d576acfd464c0b170a52845f3e94dde9d1c..a5da20e6d4fc6ad5b4a96b72d979a48b999838b2:/src/kernel/context/Context.cpp diff --git a/src/kernel/context/Context.cpp b/src/kernel/context/Context.cpp index 6bb6e89c65..9d66f8c649 100644 --- a/src/kernel/context/Context.cpp +++ b/src/kernel/context/Context.cpp @@ -92,10 +92,7 @@ void Context::stop() watched_hosts.insert(actor_->host_->get_cname()); } - actor_->finished_ = true; - // Execute the termination callbacks - simgrid::s4u::Actor::on_destruction(actor_->iface()); smx_process_exit_status_t exit_status = (actor_->context_->iwannadie) ? SMX_EXIT_FAILURE : SMX_EXIT_SUCCESS; while (not actor_->on_exit.empty()) { s_smx_process_exit_fun_t exit_fun = actor_->on_exit.back(); @@ -115,7 +112,17 @@ void Context::stop() this->cleanup_func_(this->actor_); this->iwannadie = false; // don't let the simcall's yield() do a Context::stop(), because that's me - simgrid::simix::simcall([this] { SIMIX_process_cleanup(this->actor_); }); + simgrid::simix::simcall([this] { + simgrid::s4u::Actor::on_destruction(actor_->iface()); + + /* Unregister from the kill timer if any */ + if (actor_->kill_timer != nullptr) { + SIMIX_timer_remove(actor_->kill_timer); + actor_->kill_timer = nullptr; + } + + SIMIX_process_cleanup(actor_); + }); this->iwannadie = true; }