Skip to content

Commit 425880e

Browse files
committed
Reland "[lldb/test] Fix TestProgressReporting.py race issue with the event listener"
This patch relands commit 3e3e79a, and fixes the memory sanitizer issue described in D120284, by removing the output arguments from the LLDB_INSTRUMENT_VA invocation. Differential Revision: https://reviews.llvm.org/D120599 Signed-off-by: Med Ismail Bennani <[email protected]>
1 parent badb6e2 commit 425880e

File tree

3 files changed

+24
-27
lines changed

3 files changed

+24
-27
lines changed

lldb/bindings/interface/SBDebugger.i

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,11 @@ public:
123123
};
124124

125125

126-
%apply uint64_t& INOUT { uint64_t& progress_id };
127-
%apply uint64_t& INOUT { uint64_t& completed };
128-
%apply uint64_t& INOUT { uint64_t& total };
129-
%apply bool& INOUT { bool& is_debugger_specific };
130126
static const char *GetProgressFromEvent(const lldb::SBEvent &event,
131-
uint64_t &progress_id,
132-
uint64_t &completed, uint64_t &total,
133-
bool &is_debugger_specific);
127+
uint64_t &OUTPUT,
128+
uint64_t &OUTPUT,
129+
uint64_t &OUTPUT,
130+
bool &OUTPUT);
134131

135132
SBBroadcaster GetBroadcaster();
136133

lldb/source/API/SBDebugger.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,7 @@ const char *SBDebugger::GetProgressFromEvent(const lldb::SBEvent &event,
151151
uint64_t &completed,
152152
uint64_t &total,
153153
bool &is_debugger_specific) {
154-
LLDB_INSTRUMENT_VA(event, progress_id, completed, total,
155-
is_debugger_specific);
154+
LLDB_INSTRUMENT_VA(event);
156155
const Debugger::ProgressEventData *progress_data =
157156
Debugger::ProgressEventData::GetEventDataFromEvent(event.get());
158157
if (progress_data == nullptr)

lldb/test/API/functionalities/progress_reporting/TestProgressReporting.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,41 +17,42 @@ def setUp(self):
1717
TestBase.setUp(self)
1818
self.progress_events = []
1919

20-
def fetch_events(self, test_broadcaster):
21-
listener = lldb.SBListener("lldb.progress.listener")
22-
listener.StartListeningForEvents(test_broadcaster,
23-
self.eBroadcastBitStopProgressThread)
24-
25-
progress_broadcaster = self.dbg.GetBroadcaster()
26-
progress_broadcaster.AddListener(listener, lldb.SBDebugger.eBroadcastBitProgress)
27-
20+
def fetch_events(self):
2821
event = lldb.SBEvent()
2922

3023
done = False
3124
while not done:
32-
if listener.WaitForEvent(1, event):
25+
if self.listener.WaitForEvent(1, event):
3326
event_mask = event.GetType();
34-
if event.BroadcasterMatchesRef(test_broadcaster):
27+
if event.BroadcasterMatchesRef(self.test_broadcaster):
3528
if event_mask & self.eBroadcastBitStopProgressThread:
3629
done = True;
37-
elif event.BroadcasterMatchesRef(progress_broadcaster):
38-
message = lldb.SBDebugger().GetProgressFromEvent(event, 0, 0, 0, False);
30+
elif event.BroadcasterMatchesRef(self.progress_broadcaster):
31+
ret_args = lldb.SBDebugger().GetProgressFromEvent(event);
32+
self.assertGreater(len(ret_args), 1)
33+
34+
message = ret_args[0]
3935
if message:
4036
self.progress_events.append((message, event))
4137

42-
@skipUnlessDarwin
4338
def test_dwarf_symbol_loading_progress_report(self):
4439
"""Test that we are able to fetch dwarf symbol loading progress events"""
4540
self.build()
4641

47-
test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test')
48-
listener_thread = threading.Thread(target=self.fetch_events,
49-
args=[test_broadcaster])
42+
self.listener = lldb.SBListener("lldb.progress.listener")
43+
self.test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test')
44+
self.listener.StartListeningForEvents(self.test_broadcaster,
45+
self.eBroadcastBitStopProgressThread)
46+
47+
self.progress_broadcaster = self.dbg.GetBroadcaster()
48+
self.progress_broadcaster.AddListener(self.listener, lldb.SBDebugger.eBroadcastBitProgress)
49+
50+
listener_thread = threading.Thread(target=self.fetch_events)
5051
listener_thread.start()
5152

5253
lldbutil.run_to_source_breakpoint(self, 'break here', lldb.SBFileSpec('main.c'))
5354

54-
test_broadcaster.BroadcastEventByType(self.eBroadcastBitStopProgressThread)
55+
self.test_broadcaster.BroadcastEventByType(self.eBroadcastBitStopProgressThread)
5556
listener_thread.join()
5657

57-
self.assertTrue(len(self.progress_events) > 0)
58+
self.assertGreater(len(self.progress_events), 0)

0 commit comments

Comments
 (0)