Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Sanity check that mutex are empty when destroyed
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Mon, 13 Nov 2023 00:10:41 +0000 (01:10 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Mon, 13 Nov 2023 15:05:52 +0000 (16:05 +0100)
src/kernel/activity/MutexImpl.hpp
src/s4u/s4u_Mutex.cpp

index 9d9242b..cad25c3 100644 (file)
@@ -9,6 +9,7 @@
 #include "simgrid/s4u/Mutex.hpp"
 #include "src/kernel/activity/ActivityImpl.hpp"
 #include "src/kernel/actor/ActorImpl.hpp"
+#include "xbt/asserts.h"
 #include <boost/intrusive/list.hpp>
 
 namespace simgrid::kernel::activity {
@@ -96,11 +97,14 @@ public:
 
   friend void intrusive_ptr_release(MutexImpl* mutex)
   {
-    if (mutex->refcount_.fetch_sub(1) == 1)
+    if (mutex->refcount_.fetch_sub(1) == 1) {
+      xbt_assert(mutex->ongoing_acquisitions_.empty(), "The destroyed mutex still had ongoing acquisitions");
+      xbt_assert(mutex->owner_ == nullptr, "The destroyed mutex is still owned by %s", mutex->owner_->get_cname());
       delete mutex;
+    }
   }
 
-  s4u::Mutex& mutex() { return piface_; }
+  s4u::Mutex& get_iface() { return piface_; }
 };
 } // namespace simgrid::kernel::activity
 #endif
index e2cc10d..72c2481 100644 (file)
@@ -58,7 +58,7 @@ bool Mutex::try_lock()
 MutexPtr Mutex::create(bool recursive)
 {
   auto* mutex = new kernel::activity::MutexImpl(recursive);
-  return MutexPtr(&mutex->mutex(), false);
+  return MutexPtr(&mutex->get_iface(), false);
 }
 
 Actor* Mutex::get_owner()