Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add parameter timeout to mc::ConditionWaitSimcall and mc::SemAcquireSimcall.
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sat, 13 Mar 2021 21:25:04 +0000 (22:25 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Sat, 13 Mar 2021 21:25:04 +0000 (22:25 +0100)
Prepare the modernization of simcalls cond_wait_timeout and sem_acquire_timeout.

src/mc/checker/SimcallObserver.cpp
src/mc/checker/SimcallObserver.hpp

index 297e84f..e4ec65d 100644 (file)
@@ -78,7 +78,9 @@ bool MutexLockSimcall::is_enabled() const
 
 std::string ConditionWaitSimcall::to_string(int time_considered) const
 {
-  return SimcallObserver::to_string(time_considered) + "Condition WAIT";
+  std::string res = SimcallObserver::to_string(time_considered) + "Condition WAIT";
+  res += "(" + (timeout_ == -1.0 ? "" : std::to_string(timeout_)) + ")";
+  return res;
 }
 
 std::string ConditionWaitSimcall::dot_label() const
@@ -98,7 +100,9 @@ bool ConditionWaitSimcall::is_enabled() const
 
 std::string SemAcquireSimcall::to_string(int time_considered) const
 {
-  return SimcallObserver::to_string(time_considered) + "Sem ACQUIRE";
+  std::string res = SimcallObserver::to_string(time_considered) + "Sem ACQUIRE";
+  res += "(" + (timeout_ == -1.0 ? "" : std::to_string(timeout_)) + ")";
+  return res;
 }
 
 std::string SemAcquireSimcall::dot_label() const
index f27e55a..578edd8 100644 (file)
@@ -92,11 +92,12 @@ public:
 class ConditionWaitSimcall : public SimcallObserver {
   kernel::activity::ConditionVariableImpl* const cond_;
   kernel::activity::MutexImpl* const mutex_;
+  const double timeout_;
 
 public:
   ConditionWaitSimcall(smx_actor_t actor, kernel::activity::ConditionVariableImpl* cond,
-                       kernel::activity::MutexImpl* mutex)
-      : SimcallObserver(actor), cond_(cond), mutex_(mutex)
+                       kernel::activity::MutexImpl* mutex, double timeout = -1.0)
+      : SimcallObserver(actor), cond_(cond), mutex_(mutex), timeout_(timeout)
   {
   }
   bool is_enabled() const override;
@@ -105,18 +106,24 @@ public:
   std::string dot_label() const override;
   kernel::activity::ConditionVariableImpl* get_cond() const { return cond_; }
   kernel::activity::MutexImpl* get_mutex() const { return mutex_; }
+  double get_timeout() const { return timeout_; }
 };
 
 class SemAcquireSimcall : public SimcallObserver {
   kernel::activity::SemaphoreImpl* const sem_;
+  const double timeout_;
 
 public:
-  SemAcquireSimcall(smx_actor_t actor, kernel::activity::SemaphoreImpl* sem) : SimcallObserver(actor), sem_(sem) {}
+  SemAcquireSimcall(smx_actor_t actor, kernel::activity::SemaphoreImpl* sem, double timeout = -1.0)
+      : SimcallObserver(actor), sem_(sem), timeout_(timeout)
+  {
+  }
   bool is_enabled() const override;
   bool is_visible() const override { return false; }
   std::string to_string(int times_considered) const override;
   std::string dot_label() const override;
   kernel::activity::SemaphoreImpl* get_sem() const { return sem_; }
+  double get_timeout() const { return timeout_; }
 };
 } // namespace mc
 } // namespace simgrid