From 0d4065e84bc5b13ae87790aba6294c7a21bc0199 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 26 Aug 2018 22:14:26 +0200 Subject: [PATCH] When the host dies, the actor need an exception even if it's not blocked on an activity --- src/simix/ActorImpl.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 4ee0c20f64..fd72b81eb2 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -498,10 +498,12 @@ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) { process->suspended_ = false; process->exception = nullptr; + if (process->host_->is_off()) + process->throw_exception(std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Host failed"))); + /* destroy the blocking synchro if any */ if (process->waiting_synchro != nullptr) { - if (process->host_->is_off()) - process->throw_exception(std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Host failed"))); + simgrid::kernel::activity::ExecImplPtr exec = boost::dynamic_pointer_cast(process->waiting_synchro); simgrid::kernel::activity::CommImplPtr comm = @@ -536,7 +538,9 @@ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) { } else if (io != nullptr) { delete io.get(); } else { - xbt_die("Unknown type of activity"); + simgrid::kernel::activity::ActivityImplPtr activity = process->waiting_synchro; + xbt_die("Activity %s is of unknown type %s", activity->name_.c_str(), + simgrid::xbt::demangle(typeid(activity).name()).get()); } process->waiting_synchro = nullptr; -- 2.20.1