X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b7b9fb781045188e65beb5c1dfc391a2d21e5472..82567f27fa74ddc2b6afa8d9b682bdde15fe3f9c:/src/simix/ActorImpl.cpp diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index a9e3b1c2ca..984e0ec9aa 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -58,10 +58,8 @@ ActorImpl::ActorImpl(simgrid::xbt::string name, s4u::Host* host) : host_(host), simcall.issuer = this; } -ActorImpl::~ActorImpl() -{ - delete this->context_; -} +ActorImpl::~ActorImpl() = default; + /* Become an actor in the simulation * * Currently this can only be called by the main thread (once) and only work with some thread factories @@ -90,7 +88,7 @@ ActorImplPtr ActorImpl::attach(std::string name, void* data, s4u::Host* host, XBT_VERB("Create context %s", actor->get_cname()); xbt_assert(simix_global != nullptr, "simix is not initialized, please call MSG_init first"); - actor->context_ = simix_global->context_factory->attach(actor); + actor->context_.reset(simix_global->context_factory->attach(actor)); /* Add properties */ if (properties != nullptr) @@ -106,7 +104,7 @@ ActorImplPtr ActorImpl::attach(std::string name, void* data, s4u::Host* host, simix_global->actors_to_run.push_back(actor); intrusive_ptr_add_ref(actor); - auto* context = dynamic_cast(actor->context_); + auto* context = dynamic_cast(actor->context_.get()); xbt_assert(nullptr != context, "Not a suitable context"); context->attach_start(); @@ -461,15 +459,15 @@ ActorImpl* ActorImpl::start(const simix::ActorCode& code) xbt_assert(code && host_ != nullptr, "Invalid parameters"); if (not host_->is_on()) { - intrusive_ptr_release(this); XBT_WARN("Cannot launch actor '%s' on failed host '%s'", name_.c_str(), host_->get_cname()); + intrusive_ptr_release(this); std::rethrow_exception( std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Cannot start actor on failed host."))); } this->code = code; XBT_VERB("Create context %s", get_cname()); - context_ = simix_global->context_factory->create_context(simix::ActorCode(code), this); + context_.reset(simix_global->context_factory->create_context(simix::ActorCode(code), this)); XBT_DEBUG("Start context '%s'", get_cname()); @@ -514,9 +512,9 @@ void create_maestro(const std::function& code) ActorImpl* maestro = new ActorImpl(xbt::string(""), /*host*/ nullptr); if (not code) { - maestro->context_ = simix_global->context_factory->create_context(simix::ActorCode(), maestro); + maestro->context_.reset(simix_global->context_factory->create_context(simix::ActorCode(), maestro)); } else { - maestro->context_ = simix_global->context_factory->create_maestro(simix::ActorCode(code), maestro); + maestro->context_.reset(simix_global->context_factory->create_maestro(simix::ActorCode(code), maestro)); } maestro->simcall.issuer = maestro; @@ -706,7 +704,7 @@ void SIMIX_process_on_exit(smx_actor_t actor, int_f_pvoid_pvoid_t fun, void* dat SIMIX_process_on_exit(actor, [fun](int a, void* b) { fun((void*)(intptr_t)a, b); }, data); } -void SIMIX_process_on_exit(smx_actor_t actor, std::function fun, void* data) +void SIMIX_process_on_exit(smx_actor_t actor, const std::function& fun, void* data) { xbt_assert(actor, "current process not found: are you in maestro context ?");