[Lldb-commits] [lldb] 9611282 - [lldb] Stabilize threaded windows lldb-server tests

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Wed Feb 9 07:18:44 PST 2022


Author: Pavel Labath
Date: 2022-02-09T16:18:27+01:00
New Revision: 9611282c64f4cec1d6d0d997202762fa38e99663

URL: https://github.com/llvm/llvm-project/commit/9611282c64f4cec1d6d0d997202762fa38e99663
DIFF: https://github.com/llvm/llvm-project/commit/9611282c64f4cec1d6d0d997202762fa38e99663.diff

LOG: [lldb] Stabilize threaded windows lldb-server tests

The tests enabled in 9e699595 are not passing reliably -- sometimes they
report seeing fewer threads than expected.

Based on my (limited) research, this is not a lldb bug, but simply a
consequence of the operating system reporting their presence
asynchronously -- they're reported when they are scheduled to run (or
something similar), and not at the time of the CreateThread call.

To fix this, I add some additional synchronization to the test inferior,
which makes sure that the created thread is alive before continuing to
do other things.

Added: 
    

Modified: 
    lldb/test/API/tools/lldb-server/main.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/tools/lldb-server/main.cpp b/lldb/test/API/tools/lldb-server/main.cpp
index 59e921f312f43..0383acc68fccf 100644
--- a/lldb/test/API/tools/lldb-server/main.cpp
+++ b/lldb/test/API/tools/lldb-server/main.cpp
@@ -3,6 +3,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <errno.h>
+#include <future>
 #include <inttypes.h>
 #include <memory>
 #include <mutex>
@@ -158,7 +159,8 @@ static void hello() {
   printf("hello, world\n");
 }
 
-static void *thread_func(void *arg) {
+static void *thread_func(std::promise<void> ready) {
+  ready.set_value();
   static std::atomic<int> s_thread_index(1);
   const int this_thread_index = s_thread_index++;
   if (g_print_thread_ids) {
@@ -328,7 +330,10 @@ int main(int argc, char **argv) {
         _exit(0);
 #endif
     } else if (consume_front(arg, "thread:new")) {
-        threads.push_back(std::thread(thread_func, nullptr));
+      std::promise<void> promise;
+      std::future<void> ready = promise.get_future();
+      threads.push_back(std::thread(thread_func, std::move(promise)));
+      ready.wait();
     } else if (consume_front(arg, "thread:print-ids")) {
       // Turn on thread id announcing.
       g_print_thread_ids = true;


        


More information about the lldb-commits mailing list