Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Implement test with wait_for...
[simgrid.git] / 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