#include "mc/mc.h"
+#include "simgrid/s4u/Host.hpp"
#include "src/kernel/context/Context.hpp"
#include "src/simix/smx_private.hpp"
+#include "src/surf/surf_interface.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
void_pfn_smxprocess_t cleanup_func,
smx_actor_t simix_process)
{
- xbt_assert(simix_global, "simix is not initialized, please call MSG_init first");
return simix_global->context_factory->create_context(
std::move(code), cleanup_func, simix_process);
}
void Context::stop()
{
+ actor_->finished_ = true;
+
+ if (actor_->auto_restart_ && actor_->host_->is_off()) {
+ XBT_DEBUG("Insert host %s to watched_hosts because it's off and %s needs to restart", actor_->host_->get_cname(),
+ actor_->get_cname());
+ watched_hosts.insert(actor_->host_->get_cname());
+ }
+
if (this->cleanup_func_)
this->cleanup_func_(this->actor_);
- this->actor_->suspended_ = 0;
- this->iwannadie = false;
+ this->iwannadie = false; // don't let the yield call ourself -- Context::stop()
simgrid::simix::simcall([this] { SIMIX_process_cleanup(this->actor_); });
this->iwannadie = true;
}