X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4542c9b5320d863afc041a1d9eada0f27e133086..250421d10cb833693e0b025d22e04313cb312b6a:/src/s4u/s4u_Activity.cpp diff --git a/src/s4u/s4u_Activity.cpp b/src/s4u/s4u_Activity.cpp index 7b32938217..a174119b82 100644 --- a/src/s4u/s4u_Activity.cpp +++ b/src/s4u/s4u_Activity.cpp @@ -5,10 +5,12 @@ #include "xbt/log.h" +#include "simgrid/Exception.hpp" #include "simgrid/s4u/Activity.hpp" #include "simgrid/s4u/Engine.hpp" #include "src/kernel/activity/ActivityImpl.hpp" #include "src/kernel/actor/ActorImpl.hpp" +#include "src/kernel/actor/SimcallObserver.hpp" XBT_LOG_EXTERNAL_CATEGORY(s4u); XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_activity, s4u, "S4U activities"); @@ -29,7 +31,10 @@ Activity* Activity::wait_for(double timeout) vetoable_start(); kernel::actor::ActorImpl* issuer = kernel::actor::ActorImpl::self(); - kernel::actor::simcall_blocking([this, issuer, timeout] { this->get_impl()->wait_for(issuer, timeout); }); + kernel::actor::ActivityWaitSimcall observer{issuer, pimpl_.get(), timeout}; + if (kernel::actor::simcall_blocking( + [&observer] { observer.get_activity()->wait_for(observer.get_issuer(), observer.get_timeout()); }, &observer)) + throw TimeoutException(XBT_THROW_POINT, "Timeouted"); complete(State::FINISHED); return this; } @@ -55,7 +60,10 @@ bool Activity::test() Activity* Activity::cancel() { - kernel::actor::simcall([this] { pimpl_->cancel(); }); + kernel::actor::simcall([this] { + XBT_HERE(); + pimpl_->cancel(); + }); complete(State::CANCELED); return this; }