Author: Raphael Isemann
Date: 2026-06-23T13:32:25+01:00
New Revision: 99c80fefdfac69a47773b66f35ae638d63ce5758

URL: 
https://github.com/llvm/llvm-project/commit/99c80fefdfac69a47773b66f35ae638d63ce5758
DIFF: 
https://github.com/llvm/llvm-project/commit/99c80fefdfac69a47773b66f35ae638d63ce5758.diff

LOG: [lldb] Fix race/timeout in TestInternalThreadSuspension (#203202)

This test launches a thread and then waits for a signal from the
launched thread. Below is one possible interleaving, where the
`pthread_cond_signal` (2) wins the race and becomes a no-op while (3) is
locking until the test times out.

```
void *
suspend_func (void *unused) {
  [...]
  // 2. Created thread reaches this and signals.
  pthread_cond_signal(&signal_cond);
  [...]
}

int main() {

  pthread_mutex_lock(&signal_mutex);
  // 1. Thread is created
  pthread_create(&suspend_thread, NULL, suspend_func, NULL);

  // Enable this to make race reliable:
  // sleep(1);

  // 3. We start waiting on signal_cond, but 2. already executed.
  pthread_cond_wait(&signal_cond, &signal_mutex);
```

This patch guards (2) with signal_mutex so it can only be executed after
pthread_cond_wait unlocks signal_mutex.

Added: 
    

Modified: 
    lldb/test/API/macosx/thread_suspend/main.c

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/macosx/thread_suspend/main.c 
b/lldb/test/API/macosx/thread_suspend/main.c
index 03da7a71505c7..cb4c1f34ae7ff 100644
--- a/lldb/test/API/macosx/thread_suspend/main.c
+++ b/lldb/test/API/macosx/thread_suspend/main.c
@@ -16,7 +16,9 @@ function_to_call() {
 void *
 suspend_func (void *unused) {
   pthread_setname_np("Look for me");
+  pthread_mutex_lock(&signal_mutex);
   pthread_cond_signal(&signal_cond);
+  pthread_mutex_unlock(&signal_mutex);
   pthread_mutex_lock(&suspend_mutex);
 
   return NULL; // We allowed the suspend thread to run
@@ -41,7 +43,7 @@ main()
   pthread_create(&suspend_thread, NULL, suspend_func, NULL);
 
   pthread_cond_wait(&signal_cond, &signal_mutex);
-  
+
   mach_port_t th_port = pthread_mach_thread_np(suspend_thread);
   thread_suspend(th_port);
 


        
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to