diff options
author | Ravitheja Addepally <ravitheja.addepally@intel.com> | 2016-05-11 09:54:41 +0000 |
---|---|---|
committer | Ravitheja Addepally <ravitheja.addepally@intel.com> | 2016-05-11 09:54:41 +0000 |
commit | b2ba5a546741785a1d16bd4d8e756dae2f71f286 (patch) | |
tree | f4ea7d6c7cbbbedf3fa86b45e51da7affa4014be /lldb/packages/Python/lldbsuite/test/api/multithreaded | |
parent | bfcab592ad6a0f4388d7f3df9fe52253ce05d2c8 (diff) | |
download | bcm5719-llvm-b2ba5a546741785a1d16bd4d8e756dae2f71f286.tar.gz bcm5719-llvm-b2ba5a546741785a1d16bd4d8e756dae2f71f286.zip |
Rewriting TestMultithreaded.py to solve flakyness on Linux
Summary:
test_listener_event_process_state checks for Threads
and Frames in the multithreaded_queue. The listener_func has
more computational load, which may be latter executed than the
pop leading to the failure. This patch tries to only check for
frames in listener_func as presence of frames also confirms
prescence of threads and avoids the second push into the
multithreaded_queue.
Reviewers: lldb-commits, clayborg, labath
Differential Revision: http://reviews.llvm.org/D20091
llvm-svn: 269168
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/api/multithreaded')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py | 1 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp | 46 |
2 files changed, 18 insertions, 29 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py b/lldb/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py index dcf73b11115..7959bb73de0 100644 --- a/lldb/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py +++ b/lldb/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py @@ -37,7 +37,6 @@ class SBBreakpointCallbackCase(TestBase): @skipIfNoSBHeaders @skipIfWindows # clang-cl does not support throw or catch (llvm.org/pr24538) @expectedFlakeyFreeBSD - @expectedFlakeyLinux # Driver occasionally returns '1' as exit status @expectedFailureAll("llvm.org/pr23139", oslist=["linux"], compiler="gcc", compiler_version=[">=","4.9"], archs=["x86_64"]) def test_sb_api_listener_event_process_state(self): """ Test that a registered SBListener receives events when a process diff --git a/lldb/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp b/lldb/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp index 0a698d1081d..a79c5cb2a08 100644 --- a/lldb/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp +++ b/lldb/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp @@ -18,7 +18,6 @@ using namespace std; // listener thread control extern atomic<bool> g_done; -multithreaded_queue<string> g_thread_descriptions; multithreaded_queue<string> g_frame_functions; extern SBListener g_listener; @@ -30,26 +29,21 @@ void listener_func() { if (got_event) { if (!event.IsValid()) throw Exception("event is not valid in listener thread"); - - // send process description - SBProcess process = SBProcess::GetProcessFromEvent(event); - SBStream description; - - for (int i = 0; i < process.GetNumThreads(); ++i) { - // send each thread description - description.Clear(); - SBThread thread = process.GetThreadAtIndex(i); - thread.GetDescription(description); - g_thread_descriptions.push(description.GetData()); - - // send each frame function name - uint32_t num_frames = thread.GetNumFrames(); - for(int j = 0; j < num_frames; ++j) { - const char* function_name = thread.GetFrameAtIndex(j).GetSymbol().GetName(); - if (function_name) - g_frame_functions.push(function_name); + // send process description + SBProcess process = SBProcess::GetProcessFromEvent(event); + SBStream description; + + for (int i = 0; i < process.GetNumThreads(); ++i) { + // send each thread description + SBThread thread = process.GetThreadAtIndex(i); + // send each frame function name + uint32_t num_frames = thread.GetNumFrames(); + for(int j = 0; j < num_frames; ++j) { + const char* function_name = thread.GetFrameAtIndex(j).GetSymbol().GetName(); + if (function_name) + g_frame_functions.push(string(function_name)); + } } - } } } } @@ -57,12 +51,8 @@ void listener_func() { void check_listener(SBDebugger &dbg) { // check thread description bool got_description = false; - string desc = g_thread_descriptions.pop(5, got_description); - if (!got_description) - throw Exception("Expected at least one thread description string"); - - // check at least one frame has a function name - desc = g_frame_functions.pop(5, got_description); - if (!got_description) - throw Exception("Expected at least one frame function name string"); + string func_name = g_frame_functions.pop(5, got_description); + + if(got_description == false) + throw Exception("Expected at least one frame function"); } |