From c7895d72bc8dfe43a87706f08f8ec5ea46664de9 Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Fri, 8 Mar 2019 11:11:13 +0100 Subject: [PATCH] hopefully fix most issues. thx agier for spotting the main one --- src/msg/msg_global.cpp | 2 +- src/msg/msg_private.hpp | 4 ---- src/s4u/s4u_Actor.cpp | 1 - src/simix/ActorImpl.cpp | 1 + 4 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/msg/msg_global.cpp b/src/msg/msg_global.cpp index 6f5885ad5d..9c644ff128 100644 --- a/src/msg/msg_global.cpp +++ b/src/msg/msg_global.cpp @@ -48,7 +48,7 @@ void MSG_init_nocheck(int *argc, char **argv) { simgrid::s4u::Actor::on_creation.connect([](simgrid::s4u::ActorPtr actor) { XBT_DEBUG("creating the extension to store user data"); - actor->extension_set(new simgrid::msg::ActorUserData(actor)); + actor->extension_set(new simgrid::msg::ActorUserData()); }); simgrid::s4u::Actor::on_destruction.connect([](simgrid::s4u::ActorPtr actor) { diff --git a/src/msg/msg_private.hpp b/src/msg/msg_private.hpp index 652df4ead9..adf3cc3c6f 100644 --- a/src/msg/msg_private.hpp +++ b/src/msg/msg_private.hpp @@ -99,14 +99,10 @@ public: class ActorUserData { void* userdata_ = nullptr; - s4u::ActorPtr actor_ = nullptr; public: static xbt::Extension EXTENSION_ID; - explicit ActorUserData(s4u::ActorPtr ptr) : actor_(ptr) {} - ~ActorUserData() = default; - void set_user_data(void* data) { userdata_ = data; } void* get_user_data() { return userdata_; } }; diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index 34ae162442..d4ecc67bea 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -44,7 +44,6 @@ ActorPtr Actor::init(std::string name, s4u::Host* host) smx_actor_t self = SIMIX_process_self(); simgrid::kernel::actor::ActorImpl* actor = simgrid::simix::simcall([self, name, host] { return self->init(std::move(name), host).get(); }); - intrusive_ptr_release(actor); return actor->ciface(); } diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 2e604a9e01..2d5dcaf14f 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -461,6 +461,7 @@ ActorImpl* ActorImpl::start(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()); std::rethrow_exception( std::make_exception_ptr(simgrid::HostFailureException(XBT_THROW_POINT, "Cannot start actor on failed host."))); -- 2.20.1