From 09be3731dc0739ab7e4cdb00716335b60acb4331 Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Thu, 14 Mar 2019 14:07:37 +0100 Subject: [PATCH] let base class dtor deal with surf action For CommImpl, it seems that unref() is called too late so keep the current dtor --- src/kernel/activity/ActivityImpl.cpp | 9 +++++++++ src/kernel/activity/ActivityImpl.hpp | 2 +- src/kernel/activity/ExecImpl.cpp | 2 -- src/kernel/activity/ExecImpl.hpp | 2 +- src/kernel/activity/IoImpl.cpp | 7 ------- src/kernel/activity/IoImpl.hpp | 3 --- src/kernel/activity/SleepImpl.cpp | 7 ------- src/kernel/activity/SleepImpl.hpp | 2 -- src/kernel/activity/SynchroRaw.cpp | 5 ----- src/kernel/activity/SynchroRaw.hpp | 1 - 10 files changed, 11 insertions(+), 29 deletions(-) diff --git a/src/kernel/activity/ActivityImpl.cpp b/src/kernel/activity/ActivityImpl.cpp index 5b5c6148e8..757667bb15 100644 --- a/src/kernel/activity/ActivityImpl.cpp +++ b/src/kernel/activity/ActivityImpl.cpp @@ -11,6 +11,15 @@ namespace simgrid { 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) diff --git a/src/kernel/activity/ActivityImpl.hpp b/src/kernel/activity/ActivityImpl.hpp index 58e146ce94..ffb02314db 100644 --- a/src/kernel/activity/ActivityImpl.hpp +++ b/src/kernel/activity/ActivityImpl.hpp @@ -24,7 +24,7 @@ class XBT_PUBLIC ActivityImpl { 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 simcalls_; /* List of simcalls waiting for this activity */ resource::Action* surf_action_ = nullptr; diff --git a/src/kernel/activity/ExecImpl.cpp b/src/kernel/activity/ExecImpl.cpp index 4b66dd21bb..bffe2f5197 100644 --- a/src/kernel/activity/ExecImpl.cpp +++ b/src/kernel/activity/ExecImpl.cpp @@ -61,8 +61,6 @@ ExecImpl::ExecImpl(const std::string& name, const std::string& tracing_category) ExecImpl::~ExecImpl() { - if (surf_action_) - surf_action_->unref(); if (timeout_detector_) timeout_detector_->unref(); XBT_DEBUG("Destroy exec %p", this); diff --git a/src/kernel/activity/ExecImpl.hpp b/src/kernel/activity/ExecImpl.hpp index 74daa44dd2..e784634c3b 100644 --- a/src/kernel/activity/ExecImpl.hpp +++ b/src/kernel/activity/ExecImpl.hpp @@ -16,7 +16,7 @@ namespace activity { class XBT_PUBLIC ExecImpl : public ActivityImpl { resource::Action* timeout_detector_ = nullptr; - ~ExecImpl() override; + ~ExecImpl(); public: explicit ExecImpl(const std::string& name, const std::string& tracing_category); diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index 822ff10cea..1a08cb3b25 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -37,13 +37,6 @@ namespace simgrid { 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); diff --git a/src/kernel/activity/IoImpl.hpp b/src/kernel/activity/IoImpl.hpp index 5e50b88178..e71a11e8ea 100644 --- a/src/kernel/activity/IoImpl.hpp +++ b/src/kernel/activity/IoImpl.hpp @@ -21,9 +21,6 @@ class XBT_PUBLIC IoImpl : public ActivityImpl { 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); diff --git a/src/kernel/activity/SleepImpl.cpp b/src/kernel/activity/SleepImpl.cpp index 8735baf348..addab36669 100644 --- a/src/kernel/activity/SleepImpl.cpp +++ b/src/kernel/activity/SleepImpl.cpp @@ -18,13 +18,6 @@ namespace simgrid { 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); diff --git a/src/kernel/activity/SleepImpl.hpp b/src/kernel/activity/SleepImpl.hpp index 2bf4657a3b..d4f83e0d1f 100644 --- a/src/kernel/activity/SleepImpl.hpp +++ b/src/kernel/activity/SleepImpl.hpp @@ -14,8 +14,6 @@ namespace kernel { 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; diff --git a/src/kernel/activity/SynchroRaw.cpp b/src/kernel/activity/SynchroRaw.cpp index d58e1e4e18..d736bbf275 100644 --- a/src/kernel/activity/SynchroRaw.cpp +++ b/src/kernel/activity/SynchroRaw.cpp @@ -27,11 +27,6 @@ RawImpl* RawImpl::start(s4u::Host* host, double timeout) return this; } -RawImpl::~RawImpl() -{ - surf_action_->unref(); -} - void RawImpl::suspend() { /* The suspension of raw synchros is delayed to when the process is rescheduled. */ diff --git a/src/kernel/activity/SynchroRaw.hpp b/src/kernel/activity/SynchroRaw.hpp index da5766bfd8..9ed5cf9951 100644 --- a/src/kernel/activity/SynchroRaw.hpp +++ b/src/kernel/activity/SynchroRaw.hpp @@ -16,7 +16,6 @@ namespace activity { /** Used to implement mutexes, semaphores and conditions */ class XBT_PUBLIC RawImpl : public ActivityImpl { public: - ~RawImpl() override; RawImpl* start(s4u::Host* host, double timeout); void suspend() override; void resume() override; -- 2.20.1