Skip to content

Commit d183b37

Browse files
committed
[lldb] Make Listener::m_broadcasters_mutex non-recursive
Follow-up to llvm#97400. No changes apart from changing the type were necessary. The mutex was already not used recursively.
1 parent 2a14c06 commit d183b37

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

lldb/include/lldb/Utility/Listener.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class Listener : public std::enable_shared_from_this<Listener> {
127127

128128
std::string m_name;
129129
broadcaster_collection m_broadcasters;
130-
std::recursive_mutex m_broadcasters_mutex; // Protects m_broadcasters
130+
std::mutex m_broadcasters_mutex; // Protects m_broadcasters
131131
event_collection m_events;
132132
std::mutex m_events_mutex; // Protects m_broadcasters and m_events
133133
std::condition_variable m_events_condition;

lldb/source/Utility/Listener.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ Listener::~Listener() {
3838

3939
void Listener::Clear() {
4040
Log *log = GetLog(LLDBLog::Object);
41-
std::lock_guard<std::recursive_mutex> broadcasters_guard(
42-
m_broadcasters_mutex);
41+
std::lock_guard<std::mutex> broadcasters_guard(m_broadcasters_mutex);
4342
broadcaster_collection::iterator pos, end = m_broadcasters.end();
4443
for (pos = m_broadcasters.begin(); pos != end; ++pos) {
4544
Broadcaster::BroadcasterImplSP broadcaster_sp(pos->first.lock());
@@ -68,8 +67,7 @@ uint32_t Listener::StartListeningForEvents(Broadcaster *broadcaster,
6867
// Scope for "locker"
6968
// Tell the broadcaster to add this object as a listener
7069
{
71-
std::lock_guard<std::recursive_mutex> broadcasters_guard(
72-
m_broadcasters_mutex);
70+
std::lock_guard<std::mutex> broadcasters_guard(m_broadcasters_mutex);
7371
Broadcaster::BroadcasterImplWP impl_wp(broadcaster->GetBroadcasterImpl());
7472
m_broadcasters.insert(
7573
std::make_pair(impl_wp, BroadcasterInfo(event_mask)));
@@ -99,8 +97,7 @@ uint32_t Listener::StartListeningForEvents(Broadcaster *broadcaster,
9997
// Scope for "locker"
10098
// Tell the broadcaster to add this object as a listener
10199
{
102-
std::lock_guard<std::recursive_mutex> broadcasters_guard(
103-
m_broadcasters_mutex);
100+
std::lock_guard<std::mutex> broadcasters_guard(m_broadcasters_mutex);
104101
Broadcaster::BroadcasterImplWP impl_wp(broadcaster->GetBroadcasterImpl());
105102
m_broadcasters.insert(std::make_pair(
106103
impl_wp, BroadcasterInfo(event_mask, callback, callback_user_data)));
@@ -131,8 +128,7 @@ bool Listener::StopListeningForEvents(Broadcaster *broadcaster,
131128
if (broadcaster) {
132129
// Scope for "locker"
133130
{
134-
std::lock_guard<std::recursive_mutex> broadcasters_guard(
135-
m_broadcasters_mutex);
131+
std::lock_guard<std::mutex> broadcasters_guard(m_broadcasters_mutex);
136132
m_broadcasters.erase(broadcaster->GetBroadcasterImpl());
137133
}
138134
// Remove the broadcaster from our set of broadcasters
@@ -147,8 +143,7 @@ bool Listener::StopListeningForEvents(Broadcaster *broadcaster,
147143
void Listener::BroadcasterWillDestruct(Broadcaster *broadcaster) {
148144
// Scope for "broadcasters_locker"
149145
{
150-
std::lock_guard<std::recursive_mutex> broadcasters_guard(
151-
m_broadcasters_mutex);
146+
std::lock_guard<std::mutex> broadcasters_guard(m_broadcasters_mutex);
152147
m_broadcasters.erase(broadcaster->GetBroadcasterImpl());
153148
}
154149

@@ -322,7 +317,7 @@ bool Listener::GetEvent(EventSP &event_sp, const Timeout<std::micro> &timeout) {
322317

323318
size_t Listener::HandleBroadcastEvent(EventSP &event_sp) {
324319
size_t num_handled = 0;
325-
std::lock_guard<std::recursive_mutex> guard(m_broadcasters_mutex);
320+
std::lock_guard<std::mutex> guard(m_broadcasters_mutex);
326321
Broadcaster *broadcaster = event_sp->GetBroadcaster();
327322
if (!broadcaster)
328323
return 0;
@@ -357,7 +352,7 @@ Listener::StartListeningForEventSpec(const BroadcasterManagerSP &manager_sp,
357352
// The BroadcasterManager mutex must be locked before m_broadcasters_mutex to
358353
// avoid violating the lock hierarchy (manager before broadcasters).
359354
std::lock_guard<std::mutex> manager_guard(manager_sp->m_manager_mutex);
360-
std::lock_guard<std::recursive_mutex> guard(m_broadcasters_mutex);
355+
std::lock_guard<std::mutex> guard(m_broadcasters_mutex);
361356

362357
uint32_t bits_acquired = manager_sp->RegisterListenerForEventsNoLock(
363358
this->shared_from_this(), event_spec);
@@ -379,7 +374,7 @@ bool Listener::StopListeningForEventSpec(const BroadcasterManagerSP &manager_sp,
379374
// The BroadcasterManager mutex must be locked before m_broadcasters_mutex to
380375
// avoid violating the lock hierarchy (manager before broadcasters).
381376
std::lock_guard<std::mutex> manager_guard(manager_sp->m_manager_mutex);
382-
std::lock_guard<std::recursive_mutex> guard(m_broadcasters_mutex);
377+
std::lock_guard<std::mutex> guard(m_broadcasters_mutex);
383378
return manager_sp->UnregisterListenerForEventsNoLock(this->shared_from_this(),
384379
event_spec);
385380
}

0 commit comments

Comments
 (0)