Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Implement test with wait_for... experimental
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 10 Feb 2020 15:55:06 +0000 (16:55 +0100)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Mon, 27 Nov 2023 08:45:06 +0000 (09:45 +0100)
src/s4u/s4u_Activity.cpp

index a1711b5..b3c78fa 100644 (file)
@@ -73,23 +73,14 @@ Activity* Activity::wait_for(double timeout)
 
 bool Activity::test()
 {
-  xbt_assert(state_ == State::INITED || state_ == State::STARTED || state_ == State::STARTING ||
-             state_ == State::CANCELED || state_ == State::FINISHED);
-
-  if (state_ == State::CANCELED || state_ == State::FINISHED)
-    return true;
-
-  if (state_ == State::INITED || state_ == State::STARTING)
-    this->start();
-
-  kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self();
-  kernel::actor::ActivityTestSimcall observer{issuer, pimpl_.get(), "test"};
-  if (kernel::actor::simcall_answered([&observer] { return observer.get_activity()->test(observer.get_issuer()); },
-                                      &observer)) {
-    complete(State::FINISHED);
-    return true;
+  try {
+    wait_for(0.0);
+  } catch (const simgrid::TimeoutException&) {
+    return false;
+  } catch (const simgrid::Exception& e) {
+    XBT_DEBUG("Ignored exception: %s", e.what());
   }
-  return false;
+  return true;
 }
 
 ssize_t Activity::test_any(const std::vector<ActivityPtr>& activities) // XBT_ATTRIB_DEPRECATED_v339