From: Arnaud Giersch Date: Wed, 3 Mar 2021 14:40:35 +0000 (+0100) Subject: Modernize simcall mutex_unlock. X-Git-Tag: v3.27~260 X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/6b3dd9b27c5fe2b1000b169b24e248be102a1d15 Modernize simcall mutex_unlock. --- diff --git a/include/simgrid/simix.h b/include/simgrid/simix.h index ab12a42c36..2c80e7278c 100644 --- a/include/simgrid/simix.h +++ b/include/simgrid/simix.h @@ -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); diff --git a/src/kernel/activity/MutexImpl.cpp b/src/kernel/activity/MutexImpl.cpp index cecb9056c3..a3578b9fb3 100644 --- a/src/kernel/activity/MutexImpl.cpp +++ b/src/kernel/activity/MutexImpl.cpp @@ -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_); -} diff --git a/src/mc/checker/SimcallInspector.cpp b/src/mc/checker/SimcallInspector.cpp index 4f46a345ff..29ed4c025b 100644 --- a/src/mc/checker/SimcallInspector.cpp +++ b/src/mc/checker/SimcallInspector.cpp @@ -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 diff --git a/src/mc/checker/SimcallInspector.hpp b/src/mc/checker/SimcallInspector.hpp index fccf60bad9..3a06e8ff4c 100644 --- a/src/mc/checker/SimcallInspector.hpp +++ b/src/mc/checker/SimcallInspector.hpp @@ -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 diff --git a/src/mc/mc_base.cpp b/src/mc/mc_base.cpp index 1d81a75aca..5a5624380c 100644 --- a/src/mc/mc_base.cpp +++ b/src/mc/mc_base.cpp @@ -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; } } diff --git a/src/s4u/s4u_Mutex.cpp b/src/s4u/s4u_Mutex.cpp index 6034aeb2e0..cd7ce96abd 100644 --- a/src/s4u/s4u_Mutex.cpp +++ b/src/s4u/s4u_Mutex.cpp @@ -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 */ diff --git a/src/simix/libsmx.cpp b/src/simix/libsmx.cpp index a9a37c0798..518a8be0db 100644 --- a/src/simix/libsmx.cpp +++ b/src/simix/libsmx.cpp @@ -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(); } /** diff --git a/src/simix/popping_accessors.hpp b/src/simix/popping_accessors.hpp index 21b3b1a6ab..2d0d22aad1 100644 --- a/src/simix/popping_accessors.hpp +++ b/src/simix/popping_accessors.hpp @@ -722,19 +722,6 @@ static inline void simcall_mutex_trylock__set__result(smx_simcall_t simcall, int simgrid::simix::marshal(simcall->result_, result); } -static inline smx_mutex_t simcall_mutex_unlock__get__mutex(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal(simcall->args_[0]); -} -static inline smx_mutex_t simcall_mutex_unlock__getraw__mutex(smx_simcall_t simcall) -{ - return simgrid::simix::unmarshal_raw(simcall->args_[0]); -} -static inline void simcall_mutex_unlock__set__mutex(smx_simcall_t simcall, smx_mutex_t arg) -{ - simgrid::simix::marshal(simcall->args_[0], arg); -} - static inline smx_cond_t simcall_cond_wait__get__cond(smx_simcall_t simcall) { return simgrid::simix::unmarshal(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); diff --git a/src/simix/popping_bodies.cpp b/src/simix/popping_bodies.cpp index f74df5a063..cc9f47e870 100644 --- a/src/simix/popping_bodies.cpp +++ b/src/simix/popping_bodies.cpp @@ -118,13 +118,6 @@ inline static int simcall_BODY_mutex_trylock(smx_mutex_t mutex) return simcall(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(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 */ diff --git a/src/simix/popping_enum.hpp b/src/simix/popping_enum.hpp index b03db5ad7e..05b9c67c24 100644 --- a/src/simix/popping_enum.hpp +++ b/src/simix/popping_enum.hpp @@ -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 diff --git a/src/simix/popping_generated.cpp b/src/simix/popping_generated.cpp index 9cfbf5ba3b..0aa70b73b6 100644 --- a/src/simix/popping_generated.cpp +++ b/src/simix/popping_generated.cpp @@ -40,7 +40,6 @@ constexpr std::array 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(simcall_.args_[0])); - simcall_answer(); - break; - case Simcall::COND_WAIT: simcall_HANDLER_cond_wait(&simcall_, simgrid::simix::unmarshal(simcall_.args_[0]), simgrid::simix::unmarshal(simcall_.args_[1])); break; diff --git a/src/simix/simcalls.in b/src/simix/simcalls.in index 31eee3f707..8d296c2495 100644 --- a/src/simix/simcalls.in +++ b/src/simix/simcalls.in @@ -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]];