[Lldb-commits] [lldb] [lldb-dap] Simplify DAPSessionManager GetInstance (PR #209264)
Ebuka Ezike via lldb-commits
lldb-commits at lists.llvm.org
Tue Jul 14 01:58:01 PDT 2026
https://github.com/da-viper updated https://github.com/llvm/llvm-project/pull/209264
>From 55a842e32bdfc3bef26d32916a85b5a5384711a8 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Mon, 13 Jul 2026 19:16:27 +0100
Subject: [PATCH 1/3] [lldb-dap] Simplify DAPSessionManager GetInstance
We don't need the `std::call_once` as this guaranteed to be
thread safe and initialized once.
I also don't see any issue with the destructor chain since the class
doesn't own any data that can be affected.
---
lldb/tools/lldb-dap/DAPSessionManager.cpp | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/lldb/tools/lldb-dap/DAPSessionManager.cpp b/lldb/tools/lldb-dap/DAPSessionManager.cpp
index 580d4fa102a89..91c0538e63d5f 100644
--- a/lldb/tools/lldb-dap/DAPSessionManager.cpp
+++ b/lldb/tools/lldb-dap/DAPSessionManager.cpp
@@ -33,14 +33,8 @@ ManagedEventThread::~ManagedEventThread() {
}
DAPSessionManager &DAPSessionManager::GetInstance() {
- static std::once_flag initialized;
- static DAPSessionManager *instance =
- nullptr; // NOTE: intentional leak to avoid issues with C++ destructor
- // chain
-
- std::call_once(initialized, []() { instance = new DAPSessionManager(); });
-
- return *instance;
+ static DAPSessionManager instance;
+ return instance;
}
void DAPSessionManager::RegisterSession(lldb_private::MainLoop *loop,
>From b726987fdea74aebde04118fbd6508246932b35f Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Tue, 14 Jul 2026 00:54:58 +0100
Subject: [PATCH 2/3] allocate the session manager on the heap
---
lldb/tools/lldb-dap/DAPSessionManager.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/lldb/tools/lldb-dap/DAPSessionManager.cpp b/lldb/tools/lldb-dap/DAPSessionManager.cpp
index 91c0538e63d5f..2089aa87c3d04 100644
--- a/lldb/tools/lldb-dap/DAPSessionManager.cpp
+++ b/lldb/tools/lldb-dap/DAPSessionManager.cpp
@@ -33,8 +33,10 @@ ManagedEventThread::~ManagedEventThread() {
}
DAPSessionManager &DAPSessionManager::GetInstance() {
- static DAPSessionManager instance;
- return instance;
+ // NOTE: Intentionally leaked. Detached client threads may still notify
+ // m_sessions_condition at exit, so it has to outlive them.
+ static auto *instance = new DAPSessionManager();
+ return *instance;
}
void DAPSessionManager::RegisterSession(lldb_private::MainLoop *loop,
>From 2746124bd2bb5642baffef9d0913c7ee9f6e47a2 Mon Sep 17 00:00:00 2001
From: Ebuka Ezike <yerimyah1 at gmail.com>
Date: Tue, 14 Jul 2026 09:57:40 +0100
Subject: [PATCH 3/3] update the message
---
lldb/tools/lldb-dap/DAPSessionManager.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lldb/tools/lldb-dap/DAPSessionManager.cpp b/lldb/tools/lldb-dap/DAPSessionManager.cpp
index 2089aa87c3d04..f3a731f87f4b6 100644
--- a/lldb/tools/lldb-dap/DAPSessionManager.cpp
+++ b/lldb/tools/lldb-dap/DAPSessionManager.cpp
@@ -33,7 +33,7 @@ ManagedEventThread::~ManagedEventThread() {
}
DAPSessionManager &DAPSessionManager::GetInstance() {
- // NOTE: Intentionally leaked. Detached client threads may still notify
+ // NOTE: Intentional leak. Detached client threads may still notify
// m_sessions_condition at exit, so it has to outlive them.
static auto *instance = new DAPSessionManager();
return *instance;
More information about the lldb-commits
mailing list