if (not host->is_on()) {
XBT_WARN("Cannot launch process '%s' on failed host '%s'", name.c_str(), host->get_cname());
- return nullptr;
+ std::rethrow_exception(
+ std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Cannot attach actor on failed host.")));
}
ActorImpl* actor = new ActorImpl(xbt::string(name), host);
// Forcefully kill the actor if its host is turned off. Not a HostFailureException because you should not survive that
if (not host_->is_on())
- this->throw_exception(std::make_exception_ptr(simgrid::kernel::context::StopRequest("host failed")));
+ this->throw_exception(std::make_exception_ptr(ForcefulKillException("host failed")));
/* destroy the blocking synchro if any */
if (waiting_synchro != nullptr) {
if (context_->iwannadie) {
XBT_DEBUG("Actor %s@%s is dead", get_cname(), host_->get_cname());
- // throw simgrid::kernel::context::StopRequest(); Does not seem to properly kill the actor
+ // throw simgrid::kernel::context::ForcefulKillException(); Does not seem to properly kill the actor
context_->stop();
THROW_IMPOSSIBLE;
}
if (suspended_) {
XBT_DEBUG("Hey! I'm suspended.");
- xbt_assert(exception_ != nullptr, "Gasp! This exception may be lost by subsequent calls.");
+
+ xbt_assert(exception_ == nullptr, "Gasp! This exception may be lost by subsequent calls.");
suspended_ = false;
suspend(this);
}
return nullptr;
} else {
- return activity::ExecImplPtr(new activity::ExecImpl("suspend", "", nullptr, this->host_))->start(0.0, 1.0, 0.0);
+ return activity::ExecImplPtr(new activity::ExecImpl("suspend", "", this->host_))->start(0.0, 1.0, 0.0);
}
}
if (not host->is_on()) {
XBT_WARN("Cannot launch actor '%s' on failed host '%s'", name.c_str(), host->get_cname());
- return nullptr;
+ std::rethrow_exception(
+ std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Cannot create actor on failed host.")));
}
ActorImpl* actor = new ActorImpl(simgrid::xbt::string(name), host);
SIMIX_process_on_exit(actor, [fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data);
}
-void SIMIX_process_on_exit(smx_actor_t actor, std::function<void(int, void*)> fun, void* data)
+void SIMIX_process_on_exit(smx_actor_t actor, std::function<void(bool, void*)> fun, void* data)
{
xbt_assert(actor, "current process not found: are you in maestro context ?");