X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3cb644bc04ff9dd4da159790850b6bcfda970cf9..refs/heads/experimental:/src/s4u/s4u_Activity.cpp diff --git a/src/s4u/s4u_Activity.cpp b/src/s4u/s4u_Activity.cpp index 65fd067cb5..b3c78fae83 100644 --- a/src/s4u/s4u_Activity.cpp +++ b/src/s4u/s4u_Activity.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "src/kernel/activity/ActivityImpl.hpp" @@ -52,6 +53,8 @@ Activity* Activity::wait_for(double timeout) if (state_ == State::FAILED) { if (dynamic_cast(this)) throw NetworkFailureException(XBT_THROW_POINT, "Cannot wait for a failed comm"); + if (dynamic_cast(this)) + throw NetworkFailureException(XBT_THROW_POINT, "Cannot wait for a failed mess"); if (dynamic_cast(this)) throw HostFailureException(XBT_THROW_POINT, "Cannot wait for a failed exec"); if (dynamic_cast(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& activities) +ssize_t Activity::test_any(const std::vector& activities) // XBT_ATTRIB_DEPRECATED_v339 { std::vector ractivities(activities.size()); std::transform(begin(activities), end(activities), begin(ractivities), @@ -107,7 +101,7 @@ ssize_t Activity::test_any(const std::vector& activities) return changed_pos; } -ssize_t Activity::wait_any_for(const std::vector& activities, double timeout) +ssize_t Activity::deprecated_wait_any_for(const std::vector& activities, double timeout) // XBT_ATTRIB_DEPRECATED_v339 { std::vector ractivities(activities.size()); std::transform(begin(activities), end(activities), begin(ractivities),