From 46b5928d42c0543952d6d4507c2d10555f91f009 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 21 Apr 2021 13:01:16 +0200 Subject: [PATCH] Use observer ActivityWaitSimcall in s4u::Activity::wait_for(). --- src/s4u/s4u_Activity.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/s4u/s4u_Activity.cpp b/src/s4u/s4u_Activity.cpp index 7b32938217..a8b2c76a96 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; } -- 2.20.1