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) {
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_; }
};
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();
}
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.")));