Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Improve the behavior of wait_for(0), and activate some tests
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 13 Feb 2021 08:14:59 +0000 (09:14 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 13 Feb 2021 08:15:03 +0000 (09:15 +0100)
This only fixes some of the tests, some remain broken.
There must be other bugs around.

src/kernel/activity/ActivityImpl.cpp
src/kernel/activity/ExecImpl.cpp
teshsuite/s4u/activity-lifecycle/testing_test-wait.cpp

index def6d95..6c26b63 100644 (file)
@@ -80,8 +80,12 @@ void ActivityImpl::wait_for(actor::ActorImpl* issuer, double timeout)
   /* If the synchro is already finished then perform the error handling */
   if (state_ != simgrid::kernel::activity::State::RUNNING)
     finish();
-  else {
-    /* we need a sleep action (even when there is no timeout) to be notified of host failures */
+  else if (timeout == 0.) {
+    // still running and timeout == 0 ? We need to report a timeout
+    state_ = simgrid::kernel::activity::State::TIMEOUT;
+    finish();
+  } else {
+    /* we need a sleep action (even when the timeout is infinite) to be notified of host failures */
     set_timeout(timeout);
   }
 }
index 382ed6e..0e38011 100644 (file)
@@ -80,7 +80,7 @@ ExecImpl& ExecImpl::set_hosts(const std::vector<s4u::Host*>& hosts)
 
 ExecImpl& ExecImpl::set_timeout(double timeout)
 {
-  if (timeout > 0 && not MC_is_active() && not MC_record_replay_is_active()) {
+  if (timeout >= 0 && not MC_is_active() && not MC_record_replay_is_active()) {
     timeout_detector_.reset(hosts_.front()->pimpl_cpu->sleep(timeout));
     timeout_detector_->set_activity(this);
   }
index 0e15dcd..9dd62c0 100644 (file)
@@ -224,10 +224,12 @@ TEST_CASE("Activity test/wait: using <tester_wait<0>>")
   XBT_INFO("#####[ launch next test ]#####");
 
   RUN_SECTION("exec: run and wait<0> once", test_trivial<ExecPtr, create_exec, tester_wait<0>>);
-  // exec: run and wait<0> many
+  RUN_SECTION("exec: run and wait<0> many", test_basic<ExecPtr, create_exec, tester_wait<0>>);
   RUN_SECTION("exec: cancel and wait<0>", test_cancel<ExecPtr, create_exec, tester_wait<0>>);
-  // exec: actor failure and wait<0> / sleep
-  // exec: host failure and wait<0> / sleep
+  RUN_SECTION("exec: actor failure and wait<0> / sleep",
+              test_failure_actor<ExecPtr, create_exec, tester_wait<0>, waiter_sleep6>);
+  RUN_SECTION("exec: host failure and wait<0> / sleep",
+              test_failure_host<ExecPtr, create_exec, tester_wait<0>, waiter_sleep6>);
   // exec: actor failure and wait<0> / wait
   // exec: host failure and wait<0> / wait
 
@@ -299,14 +301,6 @@ TEST_CASE("Activity test/wait: tests currently failing", "[.][failing]")
 
   // with tester_wait<0>
   // -> wait_for() should return immediately and signal a timeout (timeout == 0)
-  RUN_SECTION("exec: run and wait<0> many", test_basic<ExecPtr, create_exec, tester_wait<0>>);
-  // -> wait_for() should return immediately and signal a timeout (timeout == 0)
-  RUN_SECTION("exec: actor failure and wait<0> / sleep",
-              test_failure_actor<ExecPtr, create_exec, tester_wait<0>, waiter_sleep6>);
-  // -> wait_for() should return immediately and signal a timeout (timeout == 0)
-  RUN_SECTION("exec: host failure and wait<0> / sleep",
-              test_failure_host<ExecPtr, create_exec, tester_wait<0>, waiter_sleep6>);
-  // -> wait_for() should return immediately and signal a timeout (timeout == 0)
   RUN_SECTION("exec: actor failure and wait<0> / wait",
               test_failure_actor<ExecPtr, create_exec, tester_wait<0>, waiter_wait>);
   // -> wait_for() should return immediately and signal a timeout (timeout == 0)