X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/53ab1525ab0a15ba7323171aba78be415fd64fd6..d33a14dc048378e654595318c473d0386bc3b514:/src/kernel/actor/ActorImpl.cpp diff --git a/src/kernel/actor/ActorImpl.cpp b/src/kernel/actor/ActorImpl.cpp index 1db9c0dbaa..89052da6d9 100644 --- a/src/kernel/actor/ActorImpl.cpp +++ b/src/kernel/actor/ActorImpl.cpp @@ -32,9 +32,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_process, simix, "Logging specific to SIMIX */ smx_actor_t SIMIX_process_self() { - simgrid::kernel::context::Context* self_context = simgrid::kernel::context::Context::self(); - - return (self_context != nullptr) ? self_context->get_actor() : nullptr; + return simgrid::kernel::actor::ActorImpl::self(); } namespace simgrid { @@ -47,6 +45,13 @@ int get_maxpid() return maxpid; } +ActorImpl* ActorImpl::self() +{ + context::Context* self_context = context::Context::self(); + + return (self_context != nullptr) ? self_context->get_actor() : nullptr; +} + ActorImpl::ActorImpl(simgrid::xbt::string name, s4u::Host* host) : host_(host), name_(std::move(name)), piface_(this) { pid_ = maxpid++; @@ -55,7 +60,7 @@ ActorImpl::ActorImpl(simgrid::xbt::string name, s4u::Host* host) : host_(host), ActorImpl::~ActorImpl() { - if (simix_global != nullptr && this != simix_global->maestro_process) { + if (simix_global != nullptr && this != simix_global->maestro_) { if (context_.get() != nullptr) /* the actor was not start()ed yet. This happens if its host was initially off */ context_->iwannadie = false; // don't let the simcall's yield() do a Context::stop(), to avoid infinite loops simgrid::kernel::actor::simcall([this] { simgrid::s4u::Actor::on_destruction(*ciface()); }); @@ -157,7 +162,7 @@ void ActorImpl::cleanup() XBT_DEBUG("%s@%s(%ld) should not run anymore", get_cname(), get_host()->get_cname(), get_pid()); - if (this == simix_global->maestro_process) /* Do not cleanup maestro */ + if (this == simix_global->maestro_) /* Do not cleanup maestro */ return; XBT_DEBUG("Cleanup actor %s (%p), waiting synchro %p", get_cname(), this, waiting_synchro.get()); @@ -222,7 +227,7 @@ void ActorImpl::exit() void ActorImpl::kill(ActorImpl* actor) { - xbt_assert(actor != simix_global->maestro_process, "Killing maestro is a rather bad idea"); + xbt_assert(actor != simix_global->maestro_, "Killing maestro is a rather bad idea"); if (actor->finished_) { XBT_DEBUG("Ignoring request to kill actor %s@%s that is already dead", actor->get_cname(), actor->host_->get_cname()); @@ -326,7 +331,7 @@ void ActorImpl::undaemonize() s4u::Actor* ActorImpl::restart() { - xbt_assert(this != simix_global->maestro_process, "Restarting maestro is not supported"); + xbt_assert(this != simix_global->maestro_, "Restarting maestro is not supported"); XBT_DEBUG("Restarting actor %s on %s", get_cname(), host_->get_cname()); @@ -389,7 +394,7 @@ void ActorImpl::resume() activity::ActivityImplPtr ActorImpl::join(ActorImpl* actor, double timeout) { activity::ActivityImplPtr sleep = this->sleep(timeout); - SIMIX_process_on_exit(actor, [sleep](bool) { + actor->on_exit->emplace_back([sleep](bool) { if (sleep->surf_action_) sleep->surf_action_->finish(resource::Action::State::FINISHED); }); @@ -429,7 +434,7 @@ void ActorImpl::throw_exception(std::exception_ptr e) void ActorImpl::simcall_answer() { - if (this != simix_global->maestro_process){ + if (this != simix_global->maestro_) { XBT_DEBUG("Answer simcall %s (%d) issued by %s (%p)", SIMIX_simcall_name(simcall.call_), (int)simcall.call_, get_cname(), this); simcall.call_ = SIMCALL_NONE; @@ -496,7 +501,7 @@ ActorImplPtr ActorImpl::create(const std::string& name, const simix::ActorCode& if (parent_actor != nullptr) actor = parent_actor->init(xbt::string(name), host); else - actor = SIMIX_process_self()->init(xbt::string(name), host); + actor = self()->init(xbt::string(name), host); /* actor data */ actor->set_user_data(data); @@ -522,7 +527,7 @@ void create_maestro(const std::function& code) } maestro->simcall.issuer_ = maestro; - simix_global->maestro_process = maestro; + simix_global->maestro_ = maestro; } } // namespace actor @@ -537,7 +542,7 @@ int SIMIX_process_count() // XBT_ATTRIB_DEPRECATED_v329 // XBT_DEPRECATED_v329 void* SIMIX_process_self_get_data() { - smx_actor_t self = SIMIX_process_self(); + smx_actor_t self = simgrid::kernel::actor::ActorImpl::self(); if (self == nullptr) { return nullptr; @@ -548,14 +553,14 @@ void* SIMIX_process_self_get_data() // XBT_DEPRECATED_v329 void SIMIX_process_self_set_data(void* data) { - SIMIX_process_self()->set_user_data(data); + simgrid::kernel::actor::ActorImpl::self()->set_user_data(data); } /* needs to be public and without simcall because it is called by exceptions and logging events */ const char* SIMIX_process_self_get_name() { - return SIMIX_is_maestro() ? "maestro" : SIMIX_process_self()->get_cname(); + return SIMIX_is_maestro() ? "maestro" : simgrid::kernel::actor::ActorImpl::self()->get_cname(); } /** @@ -579,7 +584,8 @@ smx_actor_t SIMIX_process_from_PID(aid_t PID) return item->second; } -void SIMIX_process_on_exit(smx_actor_t actor, const std::function& fun) +void SIMIX_process_on_exit(smx_actor_t actor, + const std::function& fun) // XBT_ATTRIB_DEPRECATED_v329 { xbt_assert(actor, "current process not found: are you in maestro context ?"); actor->on_exit->emplace_back(fun); @@ -603,7 +609,7 @@ void SIMIX_process_on_exit(smx_actor_t actor, const std::function* properties) { - smx_actor_t self = SIMIX_process_self(); + smx_actor_t self = simgrid::kernel::actor::ActorImpl::self(); return simgrid::kernel::actor::simcall([&name, &code, data, host, properties, self] { return simgrid::kernel::actor::ActorImpl::create(name, code, data, host, properties, self).get(); });