Index: packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py =================================================================== --- packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py +++ packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/TestWatchpointMultipleThreads.py @@ -17,6 +17,7 @@ class WatchpointForMultipleThreadsTestCase(TestBase): mydir = TestBase.compute_mydir(__file__) + NO_DEBUG_INFO_TESTCASE = True @expectedFailureAll( oslist=["windows"], @@ -77,16 +78,14 @@ self.expect("watchpoint list -v", substrs=['hit_count = 0']) - while True: - self.runCmd("process continue") + self.runCmd("process continue") - self.runCmd("thread list") - if "stop reason = watchpoint" in self.res.GetOutput(): - # Good, we verified that the watchpoint works! - self.runCmd("thread backtrace all") - break - else: - self.fail("The stop reason should be either break or watchpoint") + self.runCmd("thread list") + if "stop reason = watchpoint" in self.res.GetOutput(): + # Good, we verified that the watchpoint works! + self.runCmd("thread backtrace all") + else: + self.fail("The stop reason should be either break or watchpoint") # Use the '-v' option to do verbose listing of the watchpoint. # The hit count should now be 1. Index: packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp =================================================================== --- packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp +++ packages/Python/lldbsuite/test/functionalities/watchpoint/multiple_threads/main.cpp @@ -10,13 +10,11 @@ #include #include #include -#include #include - -std::default_random_engine g_random_engine{std::random_device{}()}; -std::uniform_int_distribution<> g_distribution{0, 3000000}; +#include "pseudo_barrier.h" uint32_t g_val = 0; +pseudo_barrier_t g_barrier; uint32_t @@ -39,17 +37,13 @@ void thread_func (uint32_t thread_index) { + pseudo_barrier_wait(g_barrier); printf ("%s (thread index = %u) starting...\n", __FUNCTION__, thread_index); uint32_t count = 0; uint32_t val; while (count++ < 15) { - // random micro second sleep from zero to 3 seconds - int usec = g_distribution(g_random_engine); - printf ("%s (thread = %u) doing a usleep (%d)...\n", __FUNCTION__, thread_index, usec); - std::this_thread::sleep_for(std::chrono::microseconds{usec}); - if (count < 7) val = access_pool (); else @@ -63,14 +57,16 @@ int main (int argc, char const *argv[]) { + pseudo_barrier_init(g_barrier, 4); std::thread threads[3]; - - printf ("Before turning all three threads loose...\n"); // Set break point at this line, - // in order to set our watchpoint. // Create 3 threads for (auto &thread : threads) thread = std::thread{thread_func, std::distance(threads, &thread)}; + printf ("Before turning all three threads loose...\n"); // Set break point at this line, + // in order to set our watchpoint. + pseudo_barrier_wait(g_barrier); + // Join all of our threads for (auto &thread : threads) thread.join();