/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
-#include "simgrid/s4u/Host.hpp"
-
-#include "simgrid/kernel/resource/Action.hpp"
#include "src/kernel/activity/SleepImpl.hpp"
+#include "simgrid/Exception.hpp"
+#include "simgrid/kernel/resource/Action.hpp"
+#include "simgrid/s4u/Host.hpp"
#include "src/kernel/context/Context.hpp"
+#include "simgrid/Exception.hpp"
#include "src/simix/ActorImpl.hpp"
#include "src/simix/popping_private.hpp"
+#include "src/simix/smx_private.hpp"
#include "src/surf/surf_interface.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
while (not simcalls_.empty()) {
smx_simcall_t simcall = simcalls_.front();
simcalls_.pop_front();
-
e_smx_state_t result;
+ if (host && host->is_off()) {
+ /* If the host running the synchro failed, notice it. This way, the asking
+ * actor can be killed if it runs on that host itself */
+ result = SIMIX_SRC_HOST_FAILURE;
+ simcall->issuer->throw_exception(
+ std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Host failed")));
+ }
+
switch (surf_sleep->get_state()) {
case simgrid::kernel::resource::Action::State::FAILED:
simcall->issuer->context_->iwannadie = 1;
- result = SIMIX_SRC_HOST_FAILURE;
+ result = SIMIX_FAILED;
break;
case simgrid::kernel::resource::Action::State::FINISHED: