X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/84f504218e6e541881d121ba0382f132ff1cf135..d94f920eb99dc33e8c592e89bcbbb3a8e50fe919:/src/s4u/s4u_Actor.cpp diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index 27b2dca710..e4ec4be8c9 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -110,15 +110,19 @@ void Actor::join(double timeout) const { kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self(); const kernel::actor::ActorImpl* target = pimpl_; - kernel::actor::simcall_blocking([issuer, target, timeout] { - if (target->wannadie()) { - // The joined actor is already finished, just wake up the issuer right away - issuer->simcall_answer(); - } else { - kernel::activity::ActivityImplPtr sync = issuer->join(target, timeout); - sync->register_simcall(&issuer->simcall_); - } - }); + kernel::actor::ActorJoinSimcall observer{issuer, get_impl(), timeout}; + + kernel::actor::simcall_blocking( + [issuer, target, timeout] { + if (target->wannadie()) { + // The joined actor is already finished, just wake up the issuer right away + issuer->simcall_answer(); + } else { + kernel::activity::ActivityImplPtr sync = issuer->join(target, timeout); + sync->register_simcall(&issuer->simcall_); + } + }, + &observer); } Actor* Actor::set_auto_restart(bool autorestart) @@ -250,7 +254,7 @@ void Actor::kill() ActorPtr Actor::by_pid(aid_t pid) { - kernel::actor::ActorImpl* actor = kernel::actor::ActorImpl::by_pid(pid); + kernel::actor::ActorImpl* actor = kernel::EngineImpl::get_instance()->get_actor_by_pid(pid); if (actor != nullptr) return actor->get_iface(); else @@ -585,8 +589,8 @@ xbt_dict_t sg_actor_get_properties(const_sg_actor_t actor) const std::unordered_map* props = actor->get_properties(); if (props == nullptr) return nullptr; - for (auto const& kv : *props) { - xbt_dict_set(as_dict, kv.first.c_str(), xbt_strdup(kv.second.c_str())); + for (auto const& [key, value] : *props) { + xbt_dict_set(as_dict, key.c_str(), xbt_strdup(value.c_str())); } return as_dict; } @@ -720,7 +724,7 @@ sg_actor_t sg_actor_attach(const char* name, void* data, sg_host_t host, xbt_dic xbt_dict_free(&properties); /* Let's create the actor: SIMIX may decide to start it right now, even before returning the flow control to us */ - smx_actor_t actor = nullptr; + simgrid::kernel::actor::ActorImpl* actor = nullptr; try { actor = simgrid::kernel::actor::ActorImpl::attach(name, data, host).get(); actor->set_properties(props);