Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
hopefully fix most issues. thx agier for spotting the main one
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 8 Mar 2019 10:11:13 +0000 (11:11 +0100)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Fri, 8 Mar 2019 10:11:13 +0000 (11:11 +0100)
src/msg/msg_global.cpp
src/msg/msg_private.hpp
src/s4u/s4u_Actor.cpp
src/simix/ActorImpl.cpp

index 6f5885a..9c644ff 100644 (file)
@@ -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) {
index 652df4e..adf3cc3 100644 (file)
@@ -99,14 +99,10 @@ public:
 
 class ActorUserData {
   void* userdata_      = nullptr;
-  s4u::ActorPtr actor_ = nullptr;
 
 public:
   static xbt::Extension<simgrid::s4u::Actor, ActorUserData> 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_; }
 };
index 34ae162..d4ecc67 100644 (file)
@@ -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();
 }
 
index 2e604a9..2d5dcaf 100644 (file)
@@ -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.")));