For CommImpl, it seems that unref() is called too late so keep the
current dtor
namespace kernel {
namespace activity {
namespace kernel {
namespace activity {
+ActivityImpl::~ActivityImpl()
+{
+ if (surf_action_) {
+ surf_action_->unref();
+ XBT_DEBUG("Destroy activity %p", this);
+ surf_action_ = nullptr;
+ }
+}
+
void ActivityImpl::suspend()
{
if (surf_action_ == nullptr)
void ActivityImpl::suspend()
{
if (surf_action_ == nullptr)
public:
ActivityImpl() = default;
explicit ActivityImpl(const std::string& name) : name_(name) {}
public:
ActivityImpl() = default;
explicit ActivityImpl(const std::string& name) : name_(name) {}
- virtual ~ActivityImpl() = default;
+ virtual ~ActivityImpl();
e_smx_state_t state_ = SIMIX_WAITING; /* State of the activity */
std::list<smx_simcall_t> simcalls_; /* List of simcalls waiting for this activity */
resource::Action* surf_action_ = nullptr;
e_smx_state_t state_ = SIMIX_WAITING; /* State of the activity */
std::list<smx_simcall_t> simcalls_; /* List of simcalls waiting for this activity */
resource::Action* surf_action_ = nullptr;
- if (surf_action_)
- surf_action_->unref();
if (timeout_detector_)
timeout_detector_->unref();
XBT_DEBUG("Destroy exec %p", this);
if (timeout_detector_)
timeout_detector_->unref();
XBT_DEBUG("Destroy exec %p", this);
class XBT_PUBLIC ExecImpl : public ActivityImpl {
resource::Action* timeout_detector_ = nullptr;
class XBT_PUBLIC ExecImpl : public ActivityImpl {
resource::Action* timeout_detector_ = nullptr;
public:
explicit ExecImpl(const std::string& name, const std::string& tracing_category);
public:
explicit ExecImpl(const std::string& name, const std::string& tracing_category);
namespace kernel {
namespace activity {
namespace kernel {
namespace activity {
-IoImpl::~IoImpl()
-{
- if (surf_action_ != nullptr)
- surf_action_->unref();
- XBT_DEBUG("Destroy io %p", this);
-}
-
IoImplPtr IoImpl::set_name(const std::string& name)
{
ActivityImpl::set_name(name);
IoImplPtr IoImpl::set_name(const std::string& name)
{
ActivityImpl::set_name(name);
sg_size_t performed_ioops_ = 0;
public:
sg_size_t performed_ioops_ = 0;
public:
- ~IoImpl() override;
- IoImpl() = default;
-
IoImplPtr set_name(const std::string& name);
IoImplPtr set_size(sg_size_t size);
IoImplPtr set_type(s4u::Io::OpType type);
IoImplPtr set_name(const std::string& name);
IoImplPtr set_size(sg_size_t size);
IoImplPtr set_type(s4u::Io::OpType type);
namespace kernel {
namespace activity {
namespace kernel {
namespace activity {
-SleepImpl::~SleepImpl()
-{
- if (surf_action_)
- surf_action_->unref();
- XBT_DEBUG("Destroy activity %p", this);
-}
-
SleepImpl* SleepImpl::start(double duration)
{
surf_action_ = host_->pimpl_cpu->sleep(duration);
SleepImpl* SleepImpl::start(double duration)
{
surf_action_ = host_->pimpl_cpu->sleep(duration);
namespace activity {
class XBT_PUBLIC SleepImpl : public ActivityImpl {
namespace activity {
class XBT_PUBLIC SleepImpl : public ActivityImpl {
- ~SleepImpl() override;
-
public:
explicit SleepImpl(const std::string& name, s4u::Host* host) : ActivityImpl(name), host_(host) {}
void post() override;
public:
explicit SleepImpl(const std::string& name, s4u::Host* host) : ActivityImpl(name), host_(host) {}
void post() override;
-RawImpl::~RawImpl()
-{
- surf_action_->unref();
-}
-
void RawImpl::suspend()
{
/* The suspension of raw synchros is delayed to when the process is rescheduled. */
void RawImpl::suspend()
{
/* The suspension of raw synchros is delayed to when the process is rescheduled. */
/** Used to implement mutexes, semaphores and conditions */
class XBT_PUBLIC RawImpl : public ActivityImpl {
public:
/** Used to implement mutexes, semaphores and conditions */
class XBT_PUBLIC RawImpl : public ActivityImpl {
public:
RawImpl* start(s4u::Host* host, double timeout);
void suspend() override;
void resume() override;
RawImpl* start(s4u::Host* host, double timeout);
void suspend() override;
void resume() override;