Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Implement test with wait_for...
[simgrid.git] / src / s4u / s4u_Activity.cpp
index 65fd067..b3c78fa 100644 (file)
@@ -9,6 +9,7 @@
 #include <simgrid/s4u/Engine.hpp>
 #include <simgrid/s4u/Exec.hpp>
 #include <simgrid/s4u/Io.hpp>
+#include <simgrid/s4u/Mess.hpp>
 #include <xbt/log.h>
 
 #include "src/kernel/activity/ActivityImpl.hpp"
@@ -52,6 +53,8 @@ Activity* Activity::wait_for(double timeout)
   if (state_ == State::FAILED) {
     if (dynamic_cast<Comm*>(this))
       throw NetworkFailureException(XBT_THROW_POINT, "Cannot wait for a failed comm");
+    if (dynamic_cast<Mess*>(this))
+      throw NetworkFailureException(XBT_THROW_POINT, "Cannot wait for a failed mess");
     if (dynamic_cast<Exec*>(this))
       throw HostFailureException(XBT_THROW_POINT, "Cannot wait for a failed exec");
     if (dynamic_cast<Io*>(this))
@@ -70,26 +73,17 @@ 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)
+ssize_t Activity::test_any(const std::vector<ActivityPtr>& activities) // XBT_ATTRIB_DEPRECATED_v339
 {
   std::vector<kernel::activity::ActivityImpl*> ractivities(activities.size());
   std::transform(begin(activities), end(activities), begin(ractivities),
@@ -107,7 +101,7 @@ ssize_t Activity::test_any(const std::vector<ActivityPtr>& activities)
   return changed_pos;
 }
 
-ssize_t Activity::wait_any_for(const std::vector<ActivityPtr>& activities, double timeout)
+ssize_t Activity::deprecated_wait_any_for(const std::vector<ActivityPtr>& activities, double timeout) // XBT_ATTRIB_DEPRECATED_v339
 {
   std::vector<kernel::activity::ActivityImpl*> ractivities(activities.size());
   std::transform(begin(activities), end(activities), begin(ractivities),