[Lldb-commits] [lldb] [lldb] Fix crash in BreakpointSite::BumpHitCounts (PR #166876)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Mon Nov 10 09:52:30 PST 2025
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/166876
>From 38d0bd20d4b3d7b5fb7c053684a533b15510897f Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Thu, 6 Nov 2025 16:07:30 -0800
Subject: [PATCH 1/2] [lldb] Fix crash in BreakpointSite::BumpHitCounts
Fix crash in BreakpointSite::BumpHitCounts due to missing
synchronization. When bumping the hit count, we were correctly acquiring
the constituents mutex, but didn't protect the breakpoint location
collection.
rdar://163760832
---
lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h b/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h
index 124cb55eaf723..372bd0c51fe20 100644
--- a/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h
+++ b/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h
@@ -179,10 +179,11 @@ class BreakpointLocationCollection {
m_preserved_bps;
public:
- typedef llvm::iterator_range<collection::const_iterator>
+ typedef LockingAdaptedIterable<std::mutex, collection>
BreakpointLocationCollectionIterable;
BreakpointLocationCollectionIterable BreakpointLocations() {
- return BreakpointLocationCollectionIterable(m_break_loc_collection);
+ return BreakpointLocationCollectionIterable(m_break_loc_collection,
+ m_collection_mutex);
}
};
} // namespace lldb_private
>From 119262e064e4f99c081a6d3cbb317999a0b17cd0 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Mon, 10 Nov 2025 09:50:25 -0800
Subject: [PATCH 2/2] Make the BreakpointLocationCollection mutex recursive
---
.../include/lldb/Breakpoint/BreakpointLocationCollection.h | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h b/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h
index 372bd0c51fe20..57acb82dd96e9 100644
--- a/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h
+++ b/lldb/include/lldb/Breakpoint/BreakpointLocationCollection.h
@@ -32,7 +32,8 @@ class BreakpointLocationCollection {
~BreakpointLocationCollection();
- BreakpointLocationCollection &operator=(const BreakpointLocationCollection &rhs);
+ BreakpointLocationCollection &
+ operator=(const BreakpointLocationCollection &rhs);
/// Add the breakpoint \a bp_loc_sp to the list.
///
@@ -172,14 +173,14 @@ class BreakpointLocationCollection {
lldb::break_id_t break_loc_id) const;
collection m_break_loc_collection;
- mutable std::mutex m_collection_mutex;
+ mutable std::recursive_mutex m_collection_mutex;
/// These are used if we're preserving breakpoints in this list:
const bool m_preserving_bkpts = false;
std::map<std::pair<lldb::break_id_t, lldb::break_id_t>, lldb::BreakpointSP>
m_preserved_bps;
public:
- typedef LockingAdaptedIterable<std::mutex, collection>
+ typedef LockingAdaptedIterable<std::recursive_mutex, collection>
BreakpointLocationCollectionIterable;
BreakpointLocationCollectionIterable BreakpointLocations() {
return BreakpointLocationCollectionIterable(m_break_loc_collection,
More information about the lldb-commits
mailing list