From 805cc59543a4e31f44e2165d977e11434b473efa Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 10 Apr 2019 11:30:31 +0200
Subject: [PATCH] ENH: force clearing of Time objectRegistry on destruction
 (#1276)

- the objectRegistry destructor seems to be called too late.
  Explicitly clear the objectRegistry within the Time destructor to
  ensure that it always happens.
---
 src/OpenFOAM/db/Time/Time.C                     | 5 ++++-
 src/OpenFOAM/db/objectRegistry/objectRegistry.C | 9 +++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/OpenFOAM/db/Time/Time.C b/src/OpenFOAM/db/Time/Time.C
index 9d1c3523824..e5b8e5f2fdc 100644
--- a/src/OpenFOAM/db/Time/Time.C
+++ b/src/OpenFOAM/db/Time/Time.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2015-2018 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2015-2019 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
                             | Copyright (C) 2011-2017 OpenFOAM Foundation
@@ -727,6 +727,9 @@ Foam::Time::~Time()
 
     // Clean up profiling
     profiling::stop(*this);
+
+    // Ensure all owned objects are also cleaned up now
+    objectRegistry::clear();
 }
 
 
diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.C b/src/OpenFOAM/db/objectRegistry/objectRegistry.C
index 6d2120ff0a0..5ebcdb8d9d6 100644
--- a/src/OpenFOAM/db/objectRegistry/objectRegistry.C
+++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.C
@@ -323,6 +323,14 @@ void Foam::objectRegistry::clear()
 
         if (ptr && ptr->ownedByRegistry())
         {
+            // TBD: may wish to have ptr->clearWatches();
+
+            if (objectRegistry::debug)
+            {
+                Pout<< "objectRegistry::clear : " << ptr->name()
+                    <<  " watches :" << flatOutput(ptr->watchIndices()) << nl;
+
+            }
             delete ptr;
         }
     }
@@ -350,6 +358,7 @@ bool Foam::objectRegistry::erase(const iterator& iter)
 
         if (ptr && ptr->ownedByRegistry())
         {
+            // TBD: may wish to have ptr->clearWatches();
             delete ptr;
         }
 
-- 
GitLab