From 01b6b0c026e5fa6a87a45b53a4ce1e4dc580a358 Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Tue, 2 Apr 2019 17:09:17 +0200 Subject: [PATCH] factor cancel across activities * CommImpl is more complex * RawImpl is a noop --- src/kernel/activity/ActivityImpl.cpp | 7 +++++++ src/kernel/activity/ActivityImpl.hpp | 1 + src/kernel/activity/CommImpl.hpp | 2 +- src/kernel/activity/ExecImpl.cpp | 7 ------- src/kernel/activity/ExecImpl.hpp | 1 - src/kernel/activity/IoImpl.cpp | 8 -------- src/kernel/activity/IoImpl.hpp | 1 - src/kernel/activity/SynchroRaw.cpp | 6 ++++++ src/kernel/activity/SynchroRaw.hpp | 1 + 9 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/kernel/activity/ActivityImpl.cpp b/src/kernel/activity/ActivityImpl.cpp index 20654870e2..be0e1b0d30 100644 --- a/src/kernel/activity/ActivityImpl.cpp +++ b/src/kernel/activity/ActivityImpl.cpp @@ -43,6 +43,13 @@ void ActivityImpl::resume() on_resumed(*this); } +void ActivityImpl::cancel() +{ + XBT_VERB("Activity %p is canceled", this); + if (surf_action_ != nullptr) + surf_action_->cancel(); +} + // boost::intrusive_ptr support: void intrusive_ptr_add_ref(simgrid::kernel::activity::ActivityImpl* activity) { diff --git a/src/kernel/activity/ActivityImpl.hpp b/src/kernel/activity/ActivityImpl.hpp index a81e6ac601..1719af4ff9 100644 --- a/src/kernel/activity/ActivityImpl.hpp +++ b/src/kernel/activity/ActivityImpl.hpp @@ -31,6 +31,7 @@ public: virtual void suspend(); virtual void resume(); + virtual void cancel(); virtual void post() = 0; // What to do when a simcall terminates virtual void finish() = 0; diff --git a/src/kernel/activity/CommImpl.hpp b/src/kernel/activity/CommImpl.hpp index 0339005099..ca65fd0409 100644 --- a/src/kernel/activity/CommImpl.hpp +++ b/src/kernel/activity/CommImpl.hpp @@ -38,7 +38,7 @@ public: void resume() override; void post() override; void finish() override; - void cancel(); + void cancel() override; CommImpl::Type type_; /* Type of the communication (SIMIX_COMM_SEND or SIMIX_COMM_RECEIVE) */ MailboxImpl* mbox = nullptr; /* Rendez-vous where the comm is queued */ diff --git a/src/kernel/activity/ExecImpl.cpp b/src/kernel/activity/ExecImpl.cpp index 476723fcd6..c1b58d5157 100644 --- a/src/kernel/activity/ExecImpl.cpp +++ b/src/kernel/activity/ExecImpl.cpp @@ -124,13 +124,6 @@ ExecImpl* ExecImpl::start() return this; } -void ExecImpl::cancel() -{ - XBT_VERB("This exec %p is canceled", this); - if (surf_action_ != nullptr) - surf_action_->cancel(); -} - double ExecImpl::get_seq_remaining_ratio() { return (surf_action_ == nullptr) ? 0 : surf_action_->get_remains() / surf_action_->get_cost(); diff --git a/src/kernel/activity/ExecImpl.hpp b/src/kernel/activity/ExecImpl.hpp index 88b25eb3dc..9e35d73d76 100644 --- a/src/kernel/activity/ExecImpl.hpp +++ b/src/kernel/activity/ExecImpl.hpp @@ -42,7 +42,6 @@ public: virtual ActivityImpl* migrate(s4u::Host* to); ExecImpl* start(); - void cancel(); void post() override; void finish() override; diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index 6adcc178eb..a35e92672a 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -67,14 +67,6 @@ IoImpl* IoImpl::start() return this; } -void IoImpl::cancel() -{ - XBT_VERB("This exec %p is canceled", this); - if (surf_action_ != nullptr) - surf_action_->cancel(); - state_ = SIMIX_CANCELED; -} - void IoImpl::post() { performed_ioops_ = surf_action_->get_cost(); diff --git a/src/kernel/activity/IoImpl.hpp b/src/kernel/activity/IoImpl.hpp index fe74ccd9cc..2ab4ff700d 100644 --- a/src/kernel/activity/IoImpl.hpp +++ b/src/kernel/activity/IoImpl.hpp @@ -30,7 +30,6 @@ public: IoImpl* start(); void post() override; void finish() override; - void cancel(); static xbt::signal on_start; static xbt::signal on_completion; diff --git a/src/kernel/activity/SynchroRaw.cpp b/src/kernel/activity/SynchroRaw.cpp index 9f55ebaf90..8d8ede01ea 100644 --- a/src/kernel/activity/SynchroRaw.cpp +++ b/src/kernel/activity/SynchroRaw.cpp @@ -48,6 +48,12 @@ void RawImpl::resume() /* I cannot resume raw synchros directly. This is delayed to when the process is rescheduled at * the end of the synchro. */ } + +void RawImpl::cancel() +{ + /* I cannot cancel raw synchros directly. */ +} + void RawImpl::post() { if (surf_action_->get_state() == resource::Action::State::FAILED) { diff --git a/src/kernel/activity/SynchroRaw.hpp b/src/kernel/activity/SynchroRaw.hpp index d11a996443..13953ead95 100644 --- a/src/kernel/activity/SynchroRaw.hpp +++ b/src/kernel/activity/SynchroRaw.hpp @@ -25,6 +25,7 @@ public: RawImpl* start(); void suspend() override; void resume() override; + void cancel() override; void post() override; void finish() override; }; -- 2.20.1