From: Arnaud Giersch Date: Wed, 15 Jan 2020 20:47:05 +0000 (+0100) Subject: Make field 'Context::iwannadie' private. X-Git-Tag: v3.25~104 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/5187c5adc474e53b2f3cbf680cb0b950bf40f5a1 Make field 'Context::iwannadie' private. I'm not fond of the names for the new methods, but don't have a better idea. --- diff --git a/src/kernel/activity/CommImpl.cpp b/src/kernel/activity/CommImpl.cpp index b37cd5d22b..b80dc64481 100644 --- a/src/kernel/activity/CommImpl.cpp +++ b/src/kernel/activity/CommImpl.cpp @@ -607,7 +607,7 @@ void CommImpl::finish() /* Check out for errors */ if (not simcall->issuer_->get_host()->is_on()) { - simcall->issuer_->context_->iwannadie = true; + simcall->issuer_->context_->set_wannadie(); } else { switch (state_) { case State::DONE: @@ -627,7 +627,7 @@ void CommImpl::finish() case State::SRC_HOST_FAILURE: if (simcall->issuer_ == src_actor_) - simcall->issuer_->context_->iwannadie = true; + simcall->issuer_->context_->set_wannadie(); else simcall->issuer_->exception_ = std::make_exception_ptr(simgrid::NetworkFailureException(XBT_THROW_POINT, "Remote peer failed")); @@ -635,7 +635,7 @@ void CommImpl::finish() case State::DST_HOST_FAILURE: if (simcall->issuer_ == dst_actor_) - simcall->issuer_->context_->iwannadie = true; + simcall->issuer_->context_->set_wannadie(); else simcall->issuer_->exception_ = std::make_exception_ptr(simgrid::NetworkFailureException(XBT_THROW_POINT, "Remote peer failed")); diff --git a/src/kernel/activity/ExecImpl.cpp b/src/kernel/activity/ExecImpl.cpp index e5204d77f4..5ab240dd42 100644 --- a/src/kernel/activity/ExecImpl.cpp +++ b/src/kernel/activity/ExecImpl.cpp @@ -252,7 +252,7 @@ void ExecImpl::finish() case State::FAILED: XBT_DEBUG("ExecImpl::finish(): host '%s' failed", simcall->issuer_->get_host()->get_cname()); - simcall->issuer_->context_->iwannadie = true; + simcall->issuer_->context_->set_wannadie(); if (simcall->issuer_->get_host()->is_on()) simcall->issuer_->exception_ = std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Host failed")); @@ -279,7 +279,7 @@ void ExecImpl::finish() if (simcall->issuer_->get_host()->is_on()) simcall->issuer_->simcall_answer(); else - simcall->issuer_->context_->iwannadie = true; + simcall->issuer_->context_->set_wannadie(); } } diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index be073a7398..ce4254f7f8 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -140,7 +140,7 @@ void IoImpl::finish() /* do nothing, synchro done */ break; case State::FAILED: - simcall->issuer_->context_->iwannadie = true; + simcall->issuer_->context_->set_wannadie(); simcall->issuer_->exception_ = std::make_exception_ptr(StorageFailureException(XBT_THROW_POINT, "Storage failed")); break; diff --git a/src/kernel/activity/SynchroRaw.cpp b/src/kernel/activity/SynchroRaw.cpp index 6b1aecac0c..171199b70d 100644 --- a/src/kernel/activity/SynchroRaw.cpp +++ b/src/kernel/activity/SynchroRaw.cpp @@ -71,7 +71,7 @@ void RawImpl::finish() if (state_ == State::FAILED) { XBT_DEBUG("RawImpl::finish(): host '%s' failed", simcall->issuer_->get_host()->get_cname()); - simcall->issuer_->context_->iwannadie = true; + simcall->issuer_->context_->set_wannadie(); simcall->issuer_->exception_ = std::make_exception_ptr(HostFailureException(XBT_THROW_POINT, "Host failed")); } else if (state_ != State::SRC_TIMEOUT) { xbt_die("Internal error in RawImpl::finish() unexpected synchro state %d", static_cast(state_)); diff --git a/src/kernel/actor/ActorImpl.cpp b/src/kernel/actor/ActorImpl.cpp index d9ef6c1e2e..621c4c1a04 100644 --- a/src/kernel/actor/ActorImpl.cpp +++ b/src/kernel/actor/ActorImpl.cpp @@ -157,7 +157,7 @@ void ActorImpl::cleanup() if (on_exit) { // Execute the termination callbacks - bool failed = context_->iwannadie; + bool failed = context_->wannadie(); for (auto exit_fun = on_exit->crbegin(); exit_fun != on_exit->crend(); ++exit_fun) (*exit_fun)(failed); on_exit.reset(); @@ -183,14 +183,14 @@ void ActorImpl::cleanup() } cleanup_from_simix(); - context_->iwannadie = false; // don't let the simcall's yield() do a Context::stop(), to avoid infinite loops + context_->set_wannadie(false); // don't let the simcall's yield() do a Context::stop(), to avoid infinite loops actor::simcall([this] { s4u::Actor::on_termination(*ciface()); }); - context_->iwannadie = true; + context_->set_wannadie(); } void ActorImpl::exit() { - context_->iwannadie = true; + context_->set_wannadie(); suspended_ = false; exception_ = nullptr; @@ -276,7 +276,7 @@ void ActorImpl::yield() /* Ok, maestro returned control to us */ XBT_DEBUG("Control returned to me: '%s'", get_cname()); - if (context_->iwannadie) { + if (context_->wannadie()) { XBT_DEBUG("Actor %s@%s is dead", get_cname(), host_->get_cname()); context_->stop(); THROW_IMPOSSIBLE; @@ -371,7 +371,7 @@ void ActorImpl::resume() { XBT_IN("actor = %p", this); - if (context_->iwannadie) { + if (context_->wannadie()) { XBT_VERB("Ignoring request to suspend an actor that is currently dying."); return; } diff --git a/src/kernel/context/Context.hpp b/src/kernel/context/Context.hpp index eb44e768e8..e4f3d6690a 100644 --- a/src/kernel/context/Context.hpp +++ b/src/kernel/context/Context.hpp @@ -45,16 +45,17 @@ class XBT_PUBLIC Context { std::function code_; actor::ActorImpl* actor_ = nullptr; + bool iwannadie_ = false; void declare_context(std::size_t size); public: - bool iwannadie = false; - Context(std::function&& code, actor::ActorImpl* actor); Context(const Context&) = delete; Context& operator=(const Context&) = delete; virtual ~Context(); + bool wannadie() const { return iwannadie_; } + void set_wannadie(bool value = true) { iwannadie_ = value; } void operator()() { code_(); } bool has_code() const { return static_cast(code_); } actor::ActorImpl* get_actor() { return this->actor_; } diff --git a/src/simix/popping_generated.cpp b/src/simix/popping_generated.cpp index b3db833a89..8d4fd42e89 100644 --- a/src/simix/popping_generated.cpp +++ b/src/simix/popping_generated.cpp @@ -59,7 +59,7 @@ const char* simcall_names[] = { void simgrid::kernel::actor::ActorImpl::simcall_handle(int value) { XBT_DEBUG("Handling simcall %p: %s", &simcall, SIMIX_simcall_name(simcall.call_)); SIMCALL_SET_MC_VALUE(simcall, value); - if (context_->iwannadie) + if (context_->wannadie()) return; switch (simcall.call_) { case SIMCALL_EXECUTION_WAIT: diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index 66d358fb6a..36fa58dc89 100755 --- a/src/simix/simcalls.py +++ b/src/simix/simcalls.py @@ -344,7 +344,7 @@ if __name__ == '__main__': ' XBT_DEBUG("Handling simcall %p: %s", &simcall, SIMIX_simcall_name(simcall.call_));\n') fd.write(' SIMCALL_SET_MC_VALUE(simcall, value);\n') fd.write( - ' if (context_->iwannadie)\n') + ' if (context_->wannadie())\n') fd.write(' return;\n') fd.write(' switch (simcall.call_) {\n')