[Lldb-commits] [lldb] 8fe4b04 - [lldb] Catch missing calls to SystemLifetimeManager::Initialize (#185536)

via lldb-commits lldb-commits at lists.llvm.org
Wed Mar 11 10:32:38 PDT 2026


Author: Jonas Devlieghere
Date: 2026-03-11T10:32:33-07:00
New Revision: 8fe4b04fc1f336e41175f460d35655d4ed107f80

URL: https://github.com/llvm/llvm-project/commit/8fe4b04fc1f336e41175f460d35655d4ed107f80
DIFF: https://github.com/llvm/llvm-project/commit/8fe4b04fc1f336e41175f460d35655d4ed107f80.diff

LOG: [lldb] Catch missing calls to SystemLifetimeManager::Initialize (#185536)

We already catch missing calls to SystemLifetimeManager::Terminate, but
not for Initialize. This adds the missing assert and also makes sure it
behaves correctly when initializing and terminating more than once,
which is now supported.

Added: 
    

Modified: 
    lldb/include/lldb/Initialization/SystemLifetimeManager.h
    lldb/source/Initialization/SystemLifetimeManager.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Initialization/SystemLifetimeManager.h b/lldb/include/lldb/Initialization/SystemLifetimeManager.h
index 1b891010f5d8d..be14f775adb82 100644
--- a/lldb/include/lldb/Initialization/SystemLifetimeManager.h
+++ b/lldb/include/lldb/Initialization/SystemLifetimeManager.h
@@ -10,7 +10,6 @@
 #define LLDB_INITIALIZATION_SYSTEMLIFETIMEMANAGER_H
 
 #include "lldb/Initialization/SystemInitializer.h"
-#include "lldb/lldb-private-types.h"
 #include "llvm/Support/Error.h"
 
 #include <memory>
@@ -29,7 +28,8 @@ class SystemLifetimeManager {
 private:
   std::recursive_mutex m_mutex;
   std::unique_ptr<SystemInitializer> m_initializer;
-  bool m_initialized = false;
+  uint8_t m_initialized = 0;
+  uint8_t m_terminated = 0;
 
   // Noncopyable.
   SystemLifetimeManager(const SystemLifetimeManager &other) = delete;

diff  --git a/lldb/source/Initialization/SystemLifetimeManager.cpp b/lldb/source/Initialization/SystemLifetimeManager.cpp
index 43ceecce0cdb5..89bf1fcc2b803 100644
--- a/lldb/source/Initialization/SystemLifetimeManager.cpp
+++ b/lldb/source/Initialization/SystemLifetimeManager.cpp
@@ -17,18 +17,17 @@ using namespace lldb_private;
 SystemLifetimeManager::SystemLifetimeManager() : m_mutex() {}
 
 SystemLifetimeManager::~SystemLifetimeManager() {
-  assert(!m_initialized &&
+  assert(m_initialized != 0 &&
+         "SystemLifetimeManager destroyed without calling Initialize!");
+  assert(m_initialized == m_terminated &&
          "SystemLifetimeManager destroyed without calling Terminate!");
 }
 
 llvm::Error SystemLifetimeManager::Initialize(
     std::unique_ptr<SystemInitializer> initializer) {
   std::lock_guard<std::recursive_mutex> guard(m_mutex);
-  if (!m_initialized) {
-    assert(!m_initializer && "Attempting to call "
-                             "SystemLifetimeManager::Initialize() when it is "
-                             "already initialized");
-    m_initialized = true;
+  if (!m_initializer) {
+    m_initialized++;
     m_initializer = std::move(initializer);
 
     if (auto e = m_initializer->Initialize())
@@ -41,10 +40,9 @@ llvm::Error SystemLifetimeManager::Initialize(
 void SystemLifetimeManager::Terminate() {
   std::lock_guard<std::recursive_mutex> guard(m_mutex);
 
-  if (m_initialized) {
+  if (m_initializer) {
     m_initializer->Terminate();
-
     m_initializer.reset();
-    m_initialized = false;
+    m_terminated++;
   }
 }


        


More information about the lldb-commits mailing list