Before that change, the SMPI extension of actors got a smart reference
onto the S4U actor. That prevented S4U actors from being garbage
collected, since a SMPI extension is freed (and its smart references
released) only when the S4U actor is destroyed.
The change of this commit simply replace smart references with dumb
pointers to break the deadlock in the reference cycle, so that s4u
actors get collected after use.
std::string instance_id_;
bool replaying_ = false; /* is the process replaying a trace */
smpi_trace_call_location_t trace_call_loc_;
- s4u::ActorPtr actor_ = nullptr;
+ s4u::Actor* actor_ = nullptr;
smpi_privatization_region_t privatized_region_ = nullptr;
#ifdef __linux__
int optind_ = 0; /*for getopt replacement */
public:
static simgrid::xbt::Extension<simgrid::s4u::Actor, ActorExt> EXTENSION_ID;
- explicit ActorExt(s4u::ActorPtr actor);
+ explicit ActorExt(s4u::Actor* actor);
ActorExt(const ActorExt&) = delete;
ActorExt& operator=(const ActorExt&) = delete;
~ActorExt();
namespace smpi {
simgrid::xbt::Extension<simgrid::s4u::Actor, ActorExt> ActorExt::EXTENSION_ID;
-ActorExt::ActorExt(s4u::ActorPtr actor) : actor_(actor)
+ActorExt::ActorExt(s4u::Actor* actor) : actor_(actor)
{
if (not simgrid::smpi::ActorExt::EXTENSION_ID.valid())
simgrid::smpi::ActorExt::EXTENSION_ID = simgrid::s4u::Actor::extension_create<simgrid::smpi::ActorExt>();
// set the process attached to the mailbox
ext->mailbox_small_->set_receiver(ext->actor_);
- XBT_DEBUG("<%ld> SMPI process has been initialized: %p", ext->actor_->get_pid(), ext->actor_.get());
+ XBT_DEBUG("<%ld> SMPI process has been initialized: %p", ext->actor_->get_pid(), ext->actor_);
}
int ActorExt::get_optind()