X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a49dc3ed413f7a3ac4a03fb7593bdbebf3f19f5b..b4b5dfe452c3d7dd084b0241a954162412ff5ae6:/src/simix/ActorImpl.cpp diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 3b64841d6a..d8d4d1bf67 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; @@ -728,13 +726,12 @@ void SIMIX_process_on_exit(smx_actor_t actor, const std::function* properties) { smx_actor_t self = SIMIX_process_self(); - return simgrid::simix::simcall([name, code, data, host, properties, self] { - return simgrid::kernel::actor::ActorImpl::create(std::move(name), std::move(code), data, host, properties, self) - .get(); + return simgrid::simix::simcall([name, &code, data, host, properties, self] { + return simgrid::kernel::actor::ActorImpl::create(std::move(name), code, data, host, properties, self).get(); }); }