From: Frederic Suter Date: Tue, 6 Jun 2017 06:30:31 +0000 (+0200) Subject: try to catch some leaks X-Git-Tag: v3.16~149^2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/398273263e327fd05ef7e64b1def2a1619280eff try to catch some leaks --- diff --git a/examples/s4u/dht-chord/node.cpp b/examples/s4u/dht-chord/node.cpp index 98058a2b0a..02c37e43b6 100644 --- a/examples/s4u/dht-chord/node.cpp +++ b/examples/s4u/dht-chord/node.cpp @@ -236,13 +236,13 @@ void Node::checkPredecessor() try { comm->wait(timeout); XBT_DEBUG("Received the answer to my 'Predecessor Alive': my predecessor %d is alive", pred_id_); - delete message; } catch (xbt_ex& e) { if (e.category == timeout_error) { XBT_DEBUG("Failed to receive the answer to my 'Predecessor Alive' request"); pred_id_ = -1; } } + delete message; } /* Asks its predecessor to a remote node diff --git a/include/simgrid/s4u/Activity.hpp b/include/simgrid/s4u/Activity.hpp index b85daaaf4f..aaa9e38dd4 100644 --- a/include/simgrid/s4u/Activity.hpp +++ b/include/simgrid/s4u/Activity.hpp @@ -24,8 +24,8 @@ XBT_PUBLIC_CLASS Activity { friend void intrusive_ptr_add_ref(Comm * c); protected: - Activity(); - virtual ~Activity(); + Activity() = default; + ~Activity() = default; public: Activity(Activity const&) = delete; diff --git a/include/simgrid/s4u/Comm.hpp b/include/simgrid/s4u/Comm.hpp index d889b61251..45db6eccb7 100644 --- a/include/simgrid/s4u/Comm.hpp +++ b/include/simgrid/s4u/Comm.hpp @@ -11,7 +11,6 @@ #include #include #include - namespace simgrid { namespace s4u { /** @brief Communication async diff --git a/src/kernel/activity/ActivityImpl.hpp b/src/kernel/activity/ActivityImpl.hpp index e14429663e..af36c69bea 100644 --- a/src/kernel/activity/ActivityImpl.hpp +++ b/src/kernel/activity/ActivityImpl.hpp @@ -46,7 +46,6 @@ namespace activity { void ref(); /** @brief Reduces the refcount */ void unref(); - private: std::atomic_int_fast32_t refcount_{1}; }; diff --git a/src/s4u/s4u_activity.cpp b/src/s4u/s4u_activity.cpp index 4e8caaa89f..157010d222 100644 --- a/src/s4u/s4u_activity.cpp +++ b/src/s4u/s4u_activity.cpp @@ -15,13 +15,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_activity,s4u,"S4U activities"); namespace simgrid { namespace s4u { -Activity::Activity() { - -} -Activity::~Activity() { - -} - void Activity::setRemains(double remains) { xbt_assert(state_ == inited, "Cannot change the remaining amount of work once the Activity is started"); remains_ = remains; diff --git a/src/s4u/s4u_comm.cpp b/src/s4u/s4u_comm.cpp index d8c635be1a..547e39c424 100644 --- a/src/s4u/s4u_comm.cpp +++ b/src/s4u/s4u_comm.cpp @@ -117,13 +117,17 @@ void Comm::wait() { } } state_ = finished; + if (pimpl_) + pimpl_->unref(); } + void Comm::wait(double timeout) { xbt_assert(state_ == started || state_ == inited); if (state_ == started) { simcall_comm_wait(pimpl_, timeout); state_ = finished; + pimpl_->unref(); return; } @@ -139,6 +143,8 @@ void Comm::wait(double timeout) { userData_, timeout, rate_); } state_ = finished; + if (pimpl_) + pimpl_->unref(); } void Comm::send_detached(MailboxPtr dest, void* data, int simulatedSize) @@ -150,6 +156,7 @@ void Comm::send_detached(MailboxPtr dest, void* data, int simulatedSize) res->detached_ = true; res->start(); } + s4u::CommPtr Comm::send_async(MailboxPtr dest, void* data, int simulatedSize) { s4u::CommPtr res = CommPtr(s4u::Comm::send_init(dest)); @@ -173,6 +180,7 @@ void Comm::cancel() simgrid::kernel::activity::CommImpl* commPimpl = static_cast(pimpl_); commPimpl->cancel(); } + bool Comm::test() { xbt_assert(state_ == inited || state_ == started || state_ == finished); @@ -185,6 +193,7 @@ bool Comm::test() { if(simcall_comm_test(pimpl_)){ state_ = finished; + pimpl_->unref(); return true; } return false; diff --git a/src/simix/smx_network.cpp b/src/simix/smx_network.cpp index b9e5ced9c9..528ceda881 100644 --- a/src/simix/smx_network.cpp +++ b/src/simix/smx_network.cpp @@ -129,7 +129,6 @@ XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx other_comm->state = SIMIX_READY; other_comm->type = SIMIX_COMM_READY; - } src_proc->comms.push_back(other_comm);