From a51d0d4fe7336bfedf679ec569a106a13b55a857 Mon Sep 17 00:00:00 2001 From: Nicolas Morales Date: Thu, 8 Jun 2023 16:11:09 -0700 Subject: [PATCH] #48: ensure persistent backend state is cleared on context destruction --- src/resilience/context/Context.cpp | 16 +++++++++++++--- src/resilience/context/ContextBase.hpp | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/resilience/context/Context.cpp b/src/resilience/context/Context.cpp index aa9e9fc..98637fd 100644 --- a/src/resilience/context/Context.cpp +++ b/src/resilience/context/Context.cpp @@ -87,10 +87,22 @@ namespace KokkosResilience return buffer.data(); } + ContextBase::~ContextBase() + { + unregister_all_regions(); + } + void ContextBase::reset() { - // Unregister all regions + unregister_all_regions(); + + reset_impl(); + } + + void + ContextBase::unregister_all_regions() + { for ( auto &&[name, members] : regions ) { for ( const auto &m : members) @@ -98,7 +110,5 @@ namespace KokkosResilience m_backend->unregister_member(m); } } - - reset_impl(); } } diff --git a/src/resilience/context/ContextBase.hpp b/src/resilience/context/ContextBase.hpp index 03ceced..616a931 100644 --- a/src/resilience/context/ContextBase.hpp +++ b/src/resilience/context/ContextBase.hpp @@ -71,7 +71,7 @@ namespace KokkosResilience explicit ContextBase( const std::string& cfg_filename , int proc_id = 0) : ContextBase(Config{cfg_filename}, proc_id) {}; - virtual ~ContextBase() {}; + virtual ~ContextBase(); template void run(const std::string& label, int iteration, RegionFunc&& fun, FilterFunc&& filter, @@ -191,6 +191,7 @@ namespace KokkosResilience template void detect_and_register(RegionFunc&& fun, Detail::RegInfo... explicit_members); + void unregister_all_regions(); virtual void reset_impl() = 0; //Hold onto a buffer per context for de/serializing non-contiguous or non-host views.