Skip to content

Commit bcd0a7a

Browse files
authored
Revert "[lldb] Fix race condition in Process::WaitForProcessToStop() … (llvm#148915)
…(llvm#144919)" This was causing a couple of failures on the Ubuntu bots. Reverting while we wait on a fix for those issues. This reverts commit 8612926.
1 parent fad0fbc commit bcd0a7a

File tree

4 files changed

+0
-140
lines changed

4 files changed

+0
-140
lines changed

lldb/include/lldb/Utility/Listener.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,6 @@ class Listener : public std::enable_shared_from_this<Listener> {
5353

5454
void AddEvent(lldb::EventSP &event);
5555

56-
/// Transfers all events matching the specified broadcaster and type to the
57-
/// destination listener. This can be useful when setting up a hijack listener,
58-
/// to ensure that no relevant events are missed.
59-
void MoveEvents(lldb::ListenerSP destination,
60-
Broadcaster *broadcaster, // nullptr for any broadcaster
61-
uint32_t event_type_mask);
62-
6356
void Clear();
6457

6558
const char *GetName() { return m_name.c_str(); }

lldb/source/Utility/Broadcaster.cpp

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -335,18 +335,6 @@ bool Broadcaster::BroadcasterImpl::HijackBroadcaster(
335335
"{0} Broadcaster(\"{1}\")::HijackBroadcaster (listener(\"{2}\")={3})",
336336
static_cast<void *>(this), GetBroadcasterName(),
337337
listener_sp->m_name.c_str(), static_cast<void *>(listener_sp.get()));
338-
339-
// Move pending events from the previous listener to the hijack listener.
340-
// This ensures that no relevant event queued before the transition is missed
341-
// by the hijack listener.
342-
ListenerSP prev_listener;
343-
if (!m_hijacking_listeners.empty())
344-
prev_listener = m_hijacking_listeners.back();
345-
else if (m_primary_listener_sp)
346-
prev_listener = m_primary_listener_sp;
347-
if (prev_listener && listener_sp)
348-
prev_listener->MoveEvents(listener_sp, &m_broadcaster, event_mask);
349-
350338
m_hijacking_listeners.push_back(listener_sp);
351339
m_hijacking_masks.push_back(event_mask);
352340
return true;
@@ -379,19 +367,6 @@ void Broadcaster::BroadcasterImpl::RestoreBroadcaster() {
379367
static_cast<void *>(this), GetBroadcasterName(),
380368
listener_sp->m_name.c_str(),
381369
static_cast<void *>(listener_sp.get()));
382-
383-
// Move any remaining events from the hijack listener back to
384-
// the previous listener. This ensures that no events are dropped when
385-
// restoring the original listener.
386-
ListenerSP prev_listener;
387-
if (m_hijacking_listeners.size() > 1)
388-
prev_listener = m_hijacking_listeners[m_hijacking_listeners.size() - 2];
389-
else if (m_primary_listener_sp)
390-
prev_listener = m_primary_listener_sp;
391-
if (listener_sp && prev_listener && !m_hijacking_masks.empty())
392-
listener_sp->MoveEvents(prev_listener, &m_broadcaster,
393-
m_hijacking_masks.back());
394-
395370
m_hijacking_listeners.pop_back();
396371
}
397372
if (!m_hijacking_masks.empty())

lldb/source/Utility/Listener.cpp

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -176,33 +176,6 @@ void Listener::AddEvent(EventSP &event_sp) {
176176
m_events_condition.notify_all();
177177
}
178178

179-
void Listener::MoveEvents(
180-
ListenerSP destination,
181-
Broadcaster *broadcaster, // nullptr for any broadcaster
182-
uint32_t event_type_mask) {
183-
Log *log = GetLog(LLDBLog::Events);
184-
185-
std::lock_guard<std::mutex> guard(m_events_mutex);
186-
auto pos = m_events.begin();
187-
while (pos != m_events.end()) {
188-
EventSP &event_sp = *pos;
189-
if (event_sp &&
190-
((broadcaster == nullptr) || event_sp->BroadcasterIs(broadcaster)) &&
191-
(event_type_mask == 0 || event_type_mask & event_sp->GetType())) {
192-
LLDB_LOGF(
193-
log, "%p Listener('%s')::MoveEvents moving event %p to %p('%s')",
194-
static_cast<void *>(this), m_name.c_str(),
195-
static_cast<void *>(event_sp.get()),
196-
static_cast<void *>(destination.get()), destination->GetName());
197-
198-
destination->AddEvent(event_sp);
199-
pos = m_events.erase(pos);
200-
} else {
201-
++pos;
202-
}
203-
}
204-
}
205-
206179
bool Listener::FindNextEventInternal(
207180
std::unique_lock<std::mutex> &lock,
208181
Broadcaster *broadcaster, // nullptr for any broadcaster

lldb/unittests/Utility/ListenerTest.cpp

Lines changed: 0 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -150,84 +150,3 @@ TEST(ListenerTest, StartStopListeningForEventSpec) {
150150
ASSERT_EQ(event_sp->GetBroadcaster(), &broadcaster1);
151151
ASSERT_FALSE(listener_sp->GetEvent(event_sp, std::chrono::seconds(0)));
152152
}
153-
154-
TEST(ListenerTest, MoveEventsOnHijackAndRestore) {
155-
Broadcaster broadcaster(nullptr, "test-broadcaster");
156-
const uint32_t event_mask = 1;
157-
EventSP event_sp;
158-
159-
// Create the original listener and start listening.
160-
ListenerSP original_listener = Listener::MakeListener("original-listener");
161-
ASSERT_EQ(event_mask, original_listener->StartListeningForEvents(&broadcaster,
162-
event_mask));
163-
broadcaster.SetPrimaryListener(original_listener);
164-
165-
// Queue two events to original listener, but do not consume them yet.
166-
broadcaster.BroadcastEvent(event_mask, nullptr);
167-
broadcaster.BroadcastEvent(event_mask, nullptr);
168-
169-
// Hijack.
170-
ListenerSP hijack_listener = Listener::MakeListener("hijack-listener");
171-
broadcaster.HijackBroadcaster(hijack_listener, event_mask);
172-
173-
// The events should have been moved to the hijack listener.
174-
EXPECT_FALSE(original_listener->GetEvent(event_sp, std::chrono::seconds(0)));
175-
EXPECT_TRUE(hijack_listener->GetEvent(event_sp, std::chrono::seconds(0)));
176-
EXPECT_TRUE(hijack_listener->GetEvent(event_sp, std::chrono::seconds(0)));
177-
178-
// Queue two events while hijacked, but do not consume them yet.
179-
broadcaster.BroadcastEvent(event_mask, nullptr);
180-
broadcaster.BroadcastEvent(event_mask, nullptr);
181-
182-
// Restore the original listener.
183-
broadcaster.RestoreBroadcaster();
184-
185-
// The events queued while hijacked should have been moved back to the
186-
// original listener.
187-
EXPECT_FALSE(hijack_listener->GetEvent(event_sp, std::chrono::seconds(0)));
188-
EXPECT_TRUE(original_listener->GetEvent(event_sp, std::chrono::seconds(0)));
189-
EXPECT_TRUE(original_listener->GetEvent(event_sp, std::chrono::seconds(0)));
190-
}
191-
192-
TEST(ListenerTest, MoveEventsBetweenHijackers) {
193-
Broadcaster broadcaster(nullptr, "test-broadcaster");
194-
const uint32_t event_mask = 1;
195-
EventSP event_sp;
196-
197-
// Create the original listener and start listening.
198-
ListenerSP original_listener = Listener::MakeListener("original-listener");
199-
ASSERT_EQ(event_mask, original_listener->StartListeningForEvents(&broadcaster,
200-
event_mask));
201-
broadcaster.SetPrimaryListener(original_listener);
202-
203-
// First hijack.
204-
ListenerSP hijack_listener1 = Listener::MakeListener("hijack-listener1");
205-
broadcaster.HijackBroadcaster(hijack_listener1, event_mask);
206-
207-
// Queue two events while hijacked, but do not consume
208-
// them yet.
209-
broadcaster.BroadcastEvent(event_mask, nullptr);
210-
broadcaster.BroadcastEvent(event_mask, nullptr);
211-
212-
// Second hijack.
213-
ListenerSP hijack_listener2 = Listener::MakeListener("hijack-listener2");
214-
broadcaster.HijackBroadcaster(hijack_listener2, event_mask);
215-
216-
// The second hijacker should have the events now.
217-
EXPECT_FALSE(hijack_listener1->GetEvent(event_sp, std::chrono::seconds(0)));
218-
EXPECT_TRUE(hijack_listener2->GetEvent(event_sp, std::chrono::seconds(0)));
219-
EXPECT_TRUE(hijack_listener2->GetEvent(event_sp, std::chrono::seconds(0)));
220-
221-
// Queue two events while hijacked with second hijacker, but do not consume
222-
// them yet.
223-
broadcaster.BroadcastEvent(event_mask, nullptr);
224-
broadcaster.BroadcastEvent(event_mask, nullptr);
225-
226-
// Restore the previous hijacker.
227-
broadcaster.RestoreBroadcaster();
228-
229-
// The first hijacker should now have the events.
230-
EXPECT_FALSE(hijack_listener2->GetEvent(event_sp, std::chrono::seconds(0)));
231-
EXPECT_TRUE(hijack_listener1->GetEvent(event_sp, std::chrono::seconds(0)));
232-
EXPECT_TRUE(hijack_listener1->GetEvent(event_sp, std::chrono::seconds(0)));
233-
}

0 commit comments

Comments
 (0)