Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
MC: Support Mutexes in DPOR
[simgrid.git] / src / kernel / actor / MutexObserver.hpp
index bb83761..6b46645 100644 (file)
@@ -17,38 +17,19 @@ namespace simgrid {
 namespace kernel {
 namespace actor {
 
-/* abstract */
+/* All the observers of Mutex transitions are very similar, so implement them all together in this class */
 class MutexObserver : public SimcallObserver {
-  activity::MutexImpl* const mutex_;
+  mc::Transition::Type type_;
+  activity::MutexImpl* const mutex_ = nullptr;
 
 public:
-  MutexObserver(ActorImpl* actor, activity::MutexImpl* mutex);
-  virtual ~MutexObserver() = default;
-  activity::MutexImpl* get_mutex() const { return mutex_; }
-};
+  MutexObserver(ActorImpl* actor, mc::Transition::Type type, activity::MutexImpl* mutex);
 
-class MutexTestObserver : public MutexObserver {
-public:
-  MutexTestObserver(ActorImpl* actor, activity::MutexImpl* mutex);
-};
-
-class MutexLockAsyncObserver : public MutexObserver {
-public:
-  MutexLockAsyncObserver(ActorImpl* actor, activity::MutexImpl* mutex);
-};
-
-class MutexLockWaitObserver : public MutexObserver {
-  activity::MutexAcquisitionImplPtr synchro_;
-
-public:
-  MutexLockWaitObserver(ActorImpl* actor, activity::MutexAcquisitionImplPtr synchro);
+  void serialize(std::stringstream& stream) const override;
+  activity::MutexImpl* get_mutex() const { return mutex_; }
   bool is_enabled() override;
 };
 
-class MutexUnlockObserver : public MutexObserver {
-  using MutexObserver::MutexObserver;
-};
-
 } // namespace actor
 } // namespace kernel
 } // namespace simgrid