Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Modernize simcall mutex_unlock.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 3 Mar 2021 14:40:35 +0000 (15:40 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 3 Mar 2021 17:02:14 +0000 (18:02 +0100)
12 files changed:
include/simgrid/simix.h
src/kernel/activity/MutexImpl.cpp
src/mc/checker/SimcallInspector.cpp
src/mc/checker/SimcallInspector.hpp
src/mc/mc_base.cpp
src/s4u/s4u_Mutex.cpp
src/simix/libsmx.cpp
src/simix/popping_accessors.hpp
src/simix/popping_bodies.cpp
src/simix/popping_enum.hpp
src/simix/popping_generated.cpp
src/simix/simcalls.in

index ab12a42..2c80e72 100644 (file)
@@ -201,7 +201,7 @@ SG_BEGIN_DECL
 XBT_ATTRIB_DEPRECATED_v330("Please use sg_mutex_init()") XBT_PUBLIC smx_mutex_t simcall_mutex_init();
 XBT_PUBLIC void simcall_mutex_lock(smx_mutex_t mutex);
 XBT_PUBLIC int simcall_mutex_trylock(smx_mutex_t mutex);
-XBT_PUBLIC void simcall_mutex_unlock(smx_mutex_t mutex);
+XBT_ATTRIB_DEPRECATED_v331("Please use s4u::Mutex::unlock()") XBT_PUBLIC void simcall_mutex_unlock(smx_mutex_t mutex);
 
 XBT_ATTRIB_DEPRECATED_v330("Please use sg_cond_init()") XBT_PUBLIC smx_cond_t simcall_cond_init();
 XBT_PUBLIC void simcall_cond_wait(smx_cond_t cond, smx_mutex_t mutex);
index cecb905..a3578b9 100644 (file)
@@ -108,8 +108,3 @@ int simcall_HANDLER_mutex_trylock(smx_simcall_t simcall, smx_mutex_t mutex)
 {
   return mutex->try_lock(simcall->issuer_);
 }
-
-void simcall_HANDLER_mutex_unlock(smx_simcall_t simcall, smx_mutex_t mutex)
-{
-  mutex->unlock(simcall->issuer_);
-}
index 4f46a34..29ed4c0 100644 (file)
@@ -51,5 +51,15 @@ int RandomSimcall::get_value() const
   return next_value_;
 }
 
+std::string MutexUnlockSimcall::to_string(int time_considered) const
+{
+  return SimcallInspector::to_string(time_considered) + "Mutex UNLOCK";
+}
+
+std::string MutexUnlockSimcall::dot_label() const
+{
+  return SimcallInspector::dot_label() + "Mutex UNLOCK";
+}
+
 } // namespace mc
 } // namespace simgrid
index fccf60b..3a06e8f 100644 (file)
@@ -65,6 +65,14 @@ public:
   std::string dot_label() const override;
   int get_value() const;
 };
+
+class MutexUnlockSimcall : public SimcallInspector {
+  using SimcallInspector::SimcallInspector;
+
+public:
+  std::string to_string(int times_considered) const override;
+  std::string dot_label() const override;
+};
 } // namespace mc
 } // namespace simgrid
 
index 1d81a75..5a56243 100644 (file)
@@ -170,7 +170,7 @@ bool request_is_visible(const s_smx_simcall* req)
   return req->call_ == Simcall::COMM_ISEND || req->call_ == Simcall::COMM_IRECV || req->call_ == Simcall::COMM_WAIT ||
          req->call_ == Simcall::COMM_WAITANY || req->call_ == Simcall::COMM_TEST ||
          req->call_ == Simcall::COMM_TESTANY || req->call_ == Simcall::MUTEX_LOCK ||
-         req->call_ == Simcall::MUTEX_TRYLOCK || req->call_ == Simcall::MUTEX_UNLOCK;
+         req->call_ == Simcall::MUTEX_TRYLOCK;
 }
 
 }
index 6034aeb..cd7ce96 100644 (file)
@@ -7,6 +7,7 @@
 #include "simgrid/mutex.h"
 #include "simgrid/s4u/Mutex.hpp"
 #include "src/kernel/activity/MutexImpl.hpp"
+#include "src/mc/checker/SimcallInspector.hpp"
 
 namespace simgrid {
 namespace s4u {
@@ -29,7 +30,9 @@ void Mutex::lock()
  */
 void Mutex::unlock()
 {
-  simcall_mutex_unlock(pimpl_);
+  kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
+  mc::MutexUnlockSimcall observer{issuer};
+  kernel::actor::simcall([this, issuer] { this->pimpl_->unlock(issuer); }, &observer);
 }
 
 /** @brief Acquire the mutex if it's free, and return false (without blocking) if not */
index a9a37c0..518a8be 100644 (file)
@@ -273,9 +273,9 @@ int simcall_mutex_trylock(smx_mutex_t mutex)
  * @ingroup simix_synchro_management
  *
  */
-void simcall_mutex_unlock(smx_mutex_t mutex)
+void simcall_mutex_unlock(smx_mutex_t mutex) // XBT_ATTRIB_DEPRECATD_v331
 {
-  simcall_BODY_mutex_unlock(mutex);
+  mutex->mutex().unlock();
 }
 
 /**
index 21b3b1a..2d0d22a 100644 (file)
@@ -722,19 +722,6 @@ static inline void simcall_mutex_trylock__set__result(smx_simcall_t simcall, int
   simgrid::simix::marshal<int>(simcall->result_, result);
 }
 
-static inline smx_mutex_t simcall_mutex_unlock__get__mutex(smx_simcall_t simcall)
-{
-  return simgrid::simix::unmarshal<smx_mutex_t>(simcall->args_[0]);
-}
-static inline smx_mutex_t simcall_mutex_unlock__getraw__mutex(smx_simcall_t simcall)
-{
-  return simgrid::simix::unmarshal_raw<smx_mutex_t>(simcall->args_[0]);
-}
-static inline void simcall_mutex_unlock__set__mutex(smx_simcall_t simcall, smx_mutex_t arg)
-{
-  simgrid::simix::marshal<smx_mutex_t>(simcall->args_[0], arg);
-}
-
 static inline smx_cond_t simcall_cond_wait__get__cond(smx_simcall_t simcall)
 {
   return simgrid::simix::unmarshal<smx_cond_t>(simcall->args_[0]);
@@ -898,7 +885,6 @@ XBT_PRIVATE void simcall_HANDLER_comm_test(smx_simcall_t simcall, simgrid::kerne
 XBT_PRIVATE void simcall_HANDLER_comm_testany(smx_simcall_t simcall, simgrid::kernel::activity::CommImpl** comms, size_t count);
 XBT_PRIVATE void simcall_HANDLER_mutex_lock(smx_simcall_t simcall, smx_mutex_t mutex);
 XBT_PRIVATE int simcall_HANDLER_mutex_trylock(smx_simcall_t simcall, smx_mutex_t mutex);
-XBT_PRIVATE void simcall_HANDLER_mutex_unlock(smx_simcall_t simcall, smx_mutex_t mutex);
 XBT_PRIVATE void simcall_HANDLER_cond_wait(smx_simcall_t simcall, smx_cond_t cond, smx_mutex_t mutex);
 XBT_PRIVATE void simcall_HANDLER_cond_wait_timeout(smx_simcall_t simcall, smx_cond_t cond, smx_mutex_t mutex, double timeout);
 XBT_PRIVATE void simcall_HANDLER_sem_acquire(smx_simcall_t simcall, smx_sem_t sem);
index f74df5a..cc9f47e 100644 (file)
@@ -118,13 +118,6 @@ inline static int simcall_BODY_mutex_trylock(smx_mutex_t mutex)
   return simcall<int, smx_mutex_t>(Simcall::MUTEX_TRYLOCK, mutex);
 }
 
-inline static void simcall_BODY_mutex_unlock(smx_mutex_t mutex)
-{
-  if (false) /* Go to that function to follow the code flow through the simcall barrier */
-    simcall_HANDLER_mutex_unlock(&SIMIX_process_self()->simcall_, mutex);
-  return simcall<void, smx_mutex_t>(Simcall::MUTEX_UNLOCK, mutex);
-}
-
 inline static void simcall_BODY_cond_wait(smx_cond_t cond, smx_mutex_t mutex)
 {
   if (false) /* Go to that function to follow the code flow through the simcall barrier */
index b03db5a..05b9c67 100644 (file)
@@ -32,7 +32,6 @@ enum class Simcall {
   COMM_TESTANY,
   MUTEX_LOCK,
   MUTEX_TRYLOCK,
-  MUTEX_UNLOCK,
   COND_WAIT,
   COND_WAIT_TIMEOUT,
   SEM_ACQUIRE,
@@ -41,6 +40,6 @@ enum class Simcall {
   RUN_BLOCKING,
 };
 
-constexpr int NUM_SIMCALLS = 19;
+constexpr int NUM_SIMCALLS = 18;
 } // namespace simix
 } // namespace simgrid
index 9cfbf5b..0aa70b7 100644 (file)
@@ -40,7 +40,6 @@ constexpr std::array<const char*, simgrid::simix::NUM_SIMCALLS> simcall_names{{
     "Simcall::COMM_TESTANY",
     "Simcall::MUTEX_LOCK",
     "Simcall::MUTEX_TRYLOCK",
-    "Simcall::MUTEX_UNLOCK",
     "Simcall::COND_WAIT",
     "Simcall::COND_WAIT_TIMEOUT",
     "Simcall::SEM_ACQUIRE",
@@ -110,11 +109,6 @@ void simgrid::kernel::actor::ActorImpl::simcall_handle(int times_considered_)
       simcall_answer();
       break;
 
-    case Simcall::MUTEX_UNLOCK:
-      simcall_HANDLER_mutex_unlock(&simcall_, simgrid::simix::unmarshal<smx_mutex_t>(simcall_.args_[0]));
-      simcall_answer();
-      break;
-
     case Simcall::COND_WAIT:
       simcall_HANDLER_cond_wait(&simcall_, simgrid::simix::unmarshal<smx_cond_t>(simcall_.args_[0]), simgrid::simix::unmarshal<smx_mutex_t>(simcall_.args_[1]));
       break;
index 31eee3f..8d296c2 100644 (file)
@@ -48,7 +48,6 @@ int            comm_testany(simgrid::kernel::activity::CommImpl** comms, size_t
 
 void        mutex_lock(smx_mutex_t mutex) [[block]];
 int         mutex_trylock(smx_mutex_t mutex);
-void        mutex_unlock(smx_mutex_t mutex);
 
 void       cond_wait(smx_cond_t cond, smx_mutex_t mutex) [[block]];
 int        cond_wait_timeout(smx_cond_t cond, smx_mutex_t mutex, double timeout) [[block]];