diff --git a/BaseLib/ConfigTree.cpp b/BaseLib/ConfigTree.cpp
index ac32d11f2a153bb4ccaa1f1562f9a54195d7becd..e74dda59ff592b51d280d040414caadcc303b5f0 100644
--- a/BaseLib/ConfigTree.cpp
+++ b/BaseLib/ConfigTree.cpp
@@ -65,7 +65,8 @@ ConfigTree(ConfigTree && other)
 
 ConfigTree::~ConfigTree()
 {
-    checkAndInvalidate();
+    if (!std::uncaught_exception())
+        checkAndInvalidate();
 }
 
 ConfigTree&
@@ -194,6 +195,9 @@ void ConfigTree::ignoreConfigParameterAll(const std::string &param) const
 void ConfigTree::error(const std::string& message) const
 {
     _onerror(_filename, _path, message);
+    OGS_FATAL(
+        "ConfigTree: The error handler does not break out of the normal "
+        "control flow.");
 }
 
 void ConfigTree::warning(const std::string& message) const