From 425880ed35ee399d8f1af0aac60100e4901f289f Mon Sep 17 00:00:00 2001 From: Med Ismail Bennani Date: Fri, 25 Feb 2022 17:20:39 -0800 Subject: [PATCH] Reland "[lldb/test] Fix TestProgressReporting.py race issue with the event listener" This patch relands commit 3e3e79a9e4c378b59f5f393f556e6a84edcd8898, 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 --- lldb/bindings/interface/SBDebugger.i | 11 +++---- lldb/source/API/SBDebugger.cpp | 3 +- .../progress_reporting/TestProgressReporting.py | 37 +++++++++++----------- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/lldb/bindings/interface/SBDebugger.i b/lldb/bindings/interface/SBDebugger.i index 3790857..0ef1766 100644 --- a/lldb/bindings/interface/SBDebugger.i +++ b/lldb/bindings/interface/SBDebugger.i @@ -123,14 +123,11 @@ public: }; - %apply uint64_t& INOUT { uint64_t& progress_id }; - %apply uint64_t& INOUT { uint64_t& completed }; - %apply uint64_t& INOUT { uint64_t& total }; - %apply bool& INOUT { bool& is_debugger_specific }; static const char *GetProgressFromEvent(const lldb::SBEvent &event, - uint64_t &progress_id, - uint64_t &completed, uint64_t &total, - bool &is_debugger_specific); + uint64_t &OUTPUT, + uint64_t &OUTPUT, + uint64_t &OUTPUT, + bool &OUTPUT); SBBroadcaster GetBroadcaster(); diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 1582c53..c3d1a98 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -151,8 +151,7 @@ const char *SBDebugger::GetProgressFromEvent(const lldb::SBEvent &event, uint64_t &completed, uint64_t &total, bool &is_debugger_specific) { - LLDB_INSTRUMENT_VA(event, progress_id, completed, total, - is_debugger_specific); + LLDB_INSTRUMENT_VA(event); const Debugger::ProgressEventData *progress_data = Debugger::ProgressEventData::GetEventDataFromEvent(event.get()); if (progress_data == nullptr) diff --git a/lldb/test/API/functionalities/progress_reporting/TestProgressReporting.py b/lldb/test/API/functionalities/progress_reporting/TestProgressReporting.py index b9d9953..79ef4e3 100644 --- a/lldb/test/API/functionalities/progress_reporting/TestProgressReporting.py +++ b/lldb/test/API/functionalities/progress_reporting/TestProgressReporting.py @@ -17,41 +17,42 @@ class TestProgressReporting(TestBase): TestBase.setUp(self) self.progress_events = [] - def fetch_events(self, test_broadcaster): - listener = lldb.SBListener("lldb.progress.listener") - listener.StartListeningForEvents(test_broadcaster, - self.eBroadcastBitStopProgressThread) - - progress_broadcaster = self.dbg.GetBroadcaster() - progress_broadcaster.AddListener(listener, lldb.SBDebugger.eBroadcastBitProgress) - + def fetch_events(self): event = lldb.SBEvent() done = False while not done: - if listener.WaitForEvent(1, event): + if self.listener.WaitForEvent(1, event): event_mask = event.GetType(); - if event.BroadcasterMatchesRef(test_broadcaster): + if event.BroadcasterMatchesRef(self.test_broadcaster): if event_mask & self.eBroadcastBitStopProgressThread: done = True; - elif event.BroadcasterMatchesRef(progress_broadcaster): - message = lldb.SBDebugger().GetProgressFromEvent(event, 0, 0, 0, False); + elif event.BroadcasterMatchesRef(self.progress_broadcaster): + ret_args = lldb.SBDebugger().GetProgressFromEvent(event); + self.assertGreater(len(ret_args), 1) + + message = ret_args[0] if message: self.progress_events.append((message, event)) - @skipUnlessDarwin def test_dwarf_symbol_loading_progress_report(self): """Test that we are able to fetch dwarf symbol loading progress events""" self.build() - test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test') - listener_thread = threading.Thread(target=self.fetch_events, - args=[test_broadcaster]) + self.listener = lldb.SBListener("lldb.progress.listener") + self.test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test') + self.listener.StartListeningForEvents(self.test_broadcaster, + self.eBroadcastBitStopProgressThread) + + self.progress_broadcaster = self.dbg.GetBroadcaster() + self.progress_broadcaster.AddListener(self.listener, lldb.SBDebugger.eBroadcastBitProgress) + + listener_thread = threading.Thread(target=self.fetch_events) listener_thread.start() lldbutil.run_to_source_breakpoint(self, 'break here', lldb.SBFileSpec('main.c')) - test_broadcaster.BroadcastEventByType(self.eBroadcastBitStopProgressThread) + self.test_broadcaster.BroadcastEventByType(self.eBroadcastBitStopProgressThread) listener_thread.join() - self.assertTrue(len(self.progress_events) > 0) + self.assertGreater(len(self.progress_events), 0) -- 2.7.4