From 8749f7dec702f8afc9a24ac2770f2e2a47dfec62 Mon Sep 17 00:00:00 2001 From: Frederic Suter Date: Thu, 2 Aug 2018 21:33:21 +0200 Subject: [PATCH] SIMIX_io_destroy is ~IoImpl throw the on_completion signal --- src/kernel/activity/IoImpl.cpp | 2 ++ src/kernel/activity/IoImpl.hpp | 4 +--- src/simix/ActorImpl.cpp | 4 ++-- src/simix/smx_io.cpp | 8 -------- src/simix/smx_io_private.hpp | 5 +---- 5 files changed, 6 insertions(+), 17 deletions(-) diff --git a/src/kernel/activity/IoImpl.cpp b/src/kernel/activity/IoImpl.cpp index 7c170905ee..abcc7f8585 100644 --- a/src/kernel/activity/IoImpl.cpp +++ b/src/kernel/activity/IoImpl.cpp @@ -64,6 +64,8 @@ void simgrid::kernel::activity::IoImpl::post() THROW_IMPOSSIBLE; break; } + on_completion(this); + SIMIX_io_finish(this); } /************* diff --git a/src/kernel/activity/IoImpl.hpp b/src/kernel/activity/IoImpl.hpp index 6b06b072d4..59ec127c0b 100644 --- a/src/kernel/activity/IoImpl.hpp +++ b/src/kernel/activity/IoImpl.hpp @@ -14,12 +14,10 @@ namespace kernel { namespace activity { class XBT_PUBLIC IoImpl : public ActivityImpl { - ~IoImpl() override; - public: + ~IoImpl() override; explicit IoImpl(std::string name, resource::Action* surf_action, s4u::Storage* storage); -public: void suspend() override; void resume() override; void post() override; diff --git a/src/simix/ActorImpl.cpp b/src/simix/ActorImpl.cpp index 6aa8dfa211..c27e6d0386 100644 --- a/src/simix/ActorImpl.cpp +++ b/src/simix/ActorImpl.cpp @@ -483,7 +483,7 @@ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) { SIMIX_synchro_stop_waiting(process, &process->simcall); } else if (io != nullptr) { - SIMIX_io_destroy(process->waiting_synchro); + delete io.get(); } else { xbt_die("Unknown type of activity"); } @@ -547,7 +547,7 @@ void SIMIX_process_throw(smx_actor_t process, xbt_errcat_t cat, int value, const simgrid::kernel::activity::IoImplPtr io = boost::dynamic_pointer_cast(process->waiting_synchro); if (io != nullptr) { - SIMIX_io_destroy(process->waiting_synchro); + delete io.get(); } } process->waiting_synchro = nullptr; diff --git a/src/simix/smx_io.cpp b/src/simix/smx_io.cpp index 5d9fef2a84..98d4b230d4 100644 --- a/src/simix/smx_io.cpp +++ b/src/simix/smx_io.cpp @@ -51,14 +51,6 @@ void simcall_HANDLER_io_wait(smx_simcall_t simcall, smx_activity_t synchro) SIMIX_io_finish(synchro); } -void SIMIX_io_destroy(smx_activity_t synchro) -{ - simgrid::kernel::activity::IoImplPtr io = boost::static_pointer_cast(synchro); - XBT_DEBUG("Destroy synchro %p", synchro.get()); - if (io->surf_action_) - io->surf_action_->unref(); -} - void SIMIX_io_finish(smx_activity_t synchro) { for (smx_simcall_t const& simcall : synchro->simcalls_) { diff --git a/src/simix/smx_io_private.hpp b/src/simix/smx_io_private.hpp index 1cfa95754b..42a4aa8ce4 100644 --- a/src/simix/smx_io_private.hpp +++ b/src/simix/smx_io_private.hpp @@ -7,14 +7,11 @@ #define SIMIX_IO_PRIVATE_HPP #include - -#include "popping_private.hpp" #include "simgrid/s4u/Io.hpp" -#include "simgrid/simix.h" + XBT_PRIVATE simgrid::kernel::activity::IoImplPtr SIMIX_io_start(std::string name, sg_size_t size, sg_storage_t storage, simgrid::s4u::Io::OpType type); -XBT_PRIVATE void SIMIX_io_destroy(smx_activity_t synchro); XBT_PRIVATE void SIMIX_io_finish(smx_activity_t synchro); #endif -- 2.20.1