<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/92437>92437</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
TSAN deadlock(?) with signals and atomics on FreeBSD
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tavianator
</td>
</tr>
</table>
<pre>
```c
#include <signal.h>
#include <stdatomic.h>
#include <stdio.h>
#include <sys/time.h>
static atomic_size_t i = 0;
static atomic_size_t j = 0;
static void handler(int sig) {
atomic_fetch_add_explicit(&i, 1, memory_order_relaxed);
}
int main(void) {
signal(SIGALRM, handler);
struct itimerval ival = {0};
ival.it_value.tv_usec = 100;
ival.it_interval.tv_usec = 100;
setitimer(ITIMER_REAL, &ival, NULL);
while (atomic_load_explicit(&i, memory_order_relaxed) < 1000) {
atomic_store_explicit(&j, 1, memory_order_release);
}
ival.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &ival, NULL);
return 0;
}
```
```console
tavianator@muon $ clang18 -fsanitize=thread foo.c -o foo
tavianator@muon $ ./foo
^C^\[2] 45828 killed ./foo
```
I had to kill it from another terminal. GDB gives this stack trace:
```
(gdb) bt
#0 _umtx_op () at _umtx_op.S:4
#1 0x00000000002616ea in Wait () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/sanitizer_common/sanitizer_mutex.cpp:35
#2 0x00000000002d91c9 in Lock () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/../../sanitizer_common/sanitizer_mutex.h:196
#3 SlotLock () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp:366
#4 0x00000000002e95a3 in SlotLocker () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl.h:641
#5 Acquire () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cpp:448
#6 0x000000000028a499 in CallUserSignalHandler () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:2071
#7 0x000000000028a2eb in ProcessPendingSignalsImpl () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:2142
#8 0x0000000000281883 in ProcessPendingSignals () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl.h:674
#9 ~ScopedInterceptor () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:304
#10 0x0000000000280740 in ___interceptor_memcpy ()
at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/../../sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc:115
#11 0x0000000800352587 in handle_signal (actp=actp@entry=0x7fffffffcd40, sig=sig@entry=14, info=info@entry=0x7fffffffd130, ucp=ucp@entry=0x7fffffffcdc0)
at /usr/src/lib/libthr/thread/thr_sig.c:311
#12 0x0000000800351afb in thr_sighandler (sig=14, info=0x7fffffffd130, _ucp=0x7fffffffcdc0) at /usr/src/lib/libthr/thread/thr_sig.c:244
#13 <signal handler called>
#14 TraceSkipGap () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp:929
#15 TraceSwitchPart () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp:941
#16 0x00000000002dd462 in TraceEvent<__tsan::EventTime> () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl.h:738
#17 TraceTime () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_rtl_access.cpp:145
#18 0x00000000002c1f9b in AtomicStore<unsigned long long> () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_interface_atomic.cpp:281
#19 __tsan_atomic64_store () at /wrkdirs/usr/ports/devel/llvm18/work-default/llvm-project-18.1.3.src/compiler-rt/lib/tsan/rtl/tsan_interface_atomic.cpp:541
#20 0x00000000002f41a0 in main ()
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWF9v46gX_TTkBdUyYMf2Qx7SpJlfpc5oNOno92gRwDFTbLyA03Ye9rOv8J84ybTd1WqlSVTRBF-uzzkX33sxtVbuayEWIL4F8XpGW1dqs3D0IGlNnTazneavCzAP-z8GwjUIlwATWTPVcgEBWXkXVAUlIHdvXnacOl1J9pGF1O9ffbUAb5ysxKlJN1pHnWSwd59b-VPkDkoIyBqGgNx-YPTjwujM9KAlhyWtuRIG4FTWDlq5BziDIBns4fAZvBbCsTKnnOfipVGSSQdwCvBcAryCyA-VqLR5zbXhwuRGKPoiOMDZBCBZnyLx96yorAFOPZrze_eCA5xu7z8tH7599v6PcLMLTiNS60zLHJReSHOgCko_eBVAchv624_ruiuBdPmBqlYE7pC3VrDOFIWTZKPj0VrWrnP8twuscD0KgNP7x_vPd9_yb3fLB8_CS3bw1Fbwy_eHh_fZPJdSCQhwOgRAafqm9u_I7veVxxaeCzvuEaeNuPD2491ICmrFKdAR4kVEP1D1v5JoXG2Ea019uruPUMYH-RTZ9HTr2mol-tkpB4AorFpdQ4AjyBSt9yiFN4WltXTypwBk7UojKIeF1gGDN9p_gR85CQDeTDYgvluB-A7EKxDfYhCvPYUoTnEKn6RSgnechjUf0LiHJeXQ6W4VlA4WRleQ1tqVwkAnTCV9moLw0_oW7uVBWOhKaaF1lD1BZygTgCzfFGZMS-me7_yO2bljogohzNvKveS6gd1OySB1x6lgC8gyOhojGL6Exw-eo7mgUNbw_1S6k9UAb57NE5fGJ77WGoA3jTbO_-LiIBTAG6UOFUq9oTZPN1wUtFVumL9pjP4hmLtBaYACEljDAN4wXTVSCXNjOju5A3gzxtDkTFeVrs-mqtaJl4A1DSBLEh854HMOPEMs8xweNHv6HRycpR63cd5lEIzDP6BWArJE2fzIjMCt0u4qePgfuXFqlH8-oYzO9RdZTInXf8QuzPWg9wrPI3TEHsMl-6OVRlwNxLNdHkXpEer8XOaURlm3zVdUqe9WmG1Xg__XV93roNMVYCYap43NG23lyAuHyRSD5JIYFjtP7KvRTFj7VdRc1vuenr2vGnXt5FCEj-TSC3IoTcm75K6D2PE5SaY6kcE_t0w3gt9PrK8D7bthIOFJmQsvwhAmUejDkOenDvJKVKx5HYhNLcy1V49-6lyKSlSydkbWVjIbyJr52oKmqolOSn8ahiTGcZp4Sfq-Pe9b-q6hZa4BZN39i0JRO_MKyDp8SYr-w3gU-ubPn0jI2o-TFYr8FVkXGpB19-8tDxyRzkPL_I38-PZ9WPhGWPpg9IL2Eiq5c6Wf7NvA_osnFHgRCJpSD8IXIiBadLlnWFBO2bRnd8bnVwJ5z-AXzP8SKo5OtjCZTrbj2Qoy6tvR02MqiuCjbxy3T7L5RJvreEanviEb4-ehxgPUZ-lY-ZWa39Jxfoj2pFNAF_WX82iO_VbpONwdRO0AWeV5548sAVl2c4-yEoDcXQ8zn9kTMrUVKOkZeKBXgzKnzFfHIQwoOklbFwWVoSLrnthld1Le-oMyIKu27l4jcah0ve-GqwlCl6ULykQ-vIQauob0ZK9lsN9Ig8k86t8AXDWB-ORhwRf1togQ7eptRWV9Vl6PJ9oZXxCekYzOxAIlKE5TkqThrFwUabLju53YFSkvRBJRFoYJYbjAIecoimdygUMchTGaoxSTMAwIjQlPsqzYsSjdYeyrSUWlCjzzQJv9TFrbikWGI5LMFN0JZbv3jRjX4hl2FwH2B_-ZWXRq7dq9BVGopHV28uKkU2LxuF1-gVxQrjR78tTIxsfoWbpyeC9mIa358CrHQl3DjRHidruetUYtSuca6xMG3gC82UtXtruA6WoI1EW8AN508HycO_h_BQAA___gxIt-">