[all-commits] [llvm/llvm-project] 70f716: [libc][rwlock] fix the race condition in waiter qu...
Schrodinger ZHU Yifan via All-commits
all-commits at lists.llvm.org
Thu Jun 4 15:41:10 PDT 2026
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 70f7167ce2622a610a6d6dca4d5934ea8a07a056
https://github.com/llvm/llvm-project/commit/70f7167ce2622a610a6d6dca4d5934ea8a07a056
Author: Schrodinger ZHU Yifan <yfzhu at google.com>
Date: 2026-06-04 (Thu, 04 Jun 2026)
Changed paths:
M libc/src/__support/threads/raw_rwlock.h
Log Message:
-----------
[libc][rwlock] fix the race condition in waiter queue (#201629)
Fix #201615.
Fix the issue that non atomic operations race in waiting queue, which
causes missed futex wakeup signals.
Confirmed by TSAN:
```
==================
WARNING: ThreadSanitizer: data race (pid=388518)
Write of size 4 at 0x7ffd21cf98e4 by thread T23:
#0 __llvm_libc_23_0_0_git::RawRwLock::notify_pending_threads() ./libc/src/__support/threads/raw_rwlock.h:443:44
#1 __llvm_libc_23_0_0_git::RawRwLock::unlock() ./libc/src/__support/threads/raw_rwlock.h:520:5
#2 randomized_thread_operation(SharedData*) ./libc/test/integration/src/__support/threads/tsan_full_rwlock.cpp:104:18
#3 thread_runner(void*) ./libc/test/integration/src/__support/threads/tsan_full_rwlock.cpp:148:5
Previous atomic read of size 4 at 0x7ffd21cf98e4 by thread T4:
#0 __llvm_libc_23_0_0_git::cpp::Atomic<unsigned int>::load(...) ./libc/src/__support/CPP/atomic.h:115:5
#1 __llvm_libc_23_0_0_git::Futex::wait(...) ./libc/src/__support/threads/linux/futex_utils.h:43:17
#2 __llvm_libc_23_0_0_git::cpp::expected<int, int> __llvm_libc_23_0_0_git::rwlock::WaitingQueue::wait<Role::Reader>(...) ./libc/src/__support/threads/raw_rwlock.h:101:35
#3 __llvm_libc_23_0_0_git::rwlock::LockResult __llvm_libc_23_0_0_git::RawRwLock::lock_slow<Role::Reader>(...) ./libc/src/__support/threads/raw_rwlock.h:402:34
#4 __llvm_libc_23_0_0_git::RawRwLock::read_lock(...) ./libc/src/__support/threads/raw_rwlock.h:485:12
#5 randomized_thread_operation(SharedData*) ./libc/test/integration/src/__support/threads/tsan_full_rwlock.cpp:79:16
#6 thread_runner(void*) ./libc/test/integration/src/__support/threads/tsan_full_rwlock.cpp:148:5
Thread T23 (tid=388553, running) created by main thread at:
#0 pthread_create ...
#1 main ./libc/test/integration/src/__support/threads/tsan_full_rwlock.cpp:166:5
Thread T4 (tid=388533, running) created by main thread at:
#0 pthread_create ...
#1 main ./libc/test/integration/src/__support/threads/tsan_full_rwlock.cpp:166:5
SUMMARY: ThreadSanitizer: data race ./libc/src/__support/threads/raw_rwlock.h:443:44 in __llvm_libc_23_0_0_git::RawRwLock::notify_pending_threads()
==================
```
AI wrote the detection script. Manually fixed.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list