<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55226>55226</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            tsan: frozen test-case
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          marxin
      </td>
    </tr>
</table>

<pre>
    I'm doing GCC merge from upstream and I noticed a freeze since f831d6fc800ccf22c1c09888fce3e3c8ebc2c992 revision:
Using the following testcase:
https://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/c-c%2B%2B-common/tsan/free_race.c

```
$ gcc /home/marxin/Programming/gcc/gcc/testsuite/c-c++-common/tsan/free_race.c -fsanitize=thread && ./a.out
(frozen)

$ gdb a.out
Breakpoint 1, 0x00007ffff6f800f8 in __tsan::SlotLocker::SlotLocker (recursive=<optimized out>, thr=<optimized out>, this=<optimized out>) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_rtl.h:593
593           SlotLock(thr_);
(gdb) bt
#0  0x00007ffff6f800f8 in __tsan::SlotLocker::SlotLocker (recursive=<optimized out>, thr=<optimized out>, this=<optimized out>) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_rtl.h:593
#1  __tsan::FdClose (thr=0x7ffff6be7780, pc=140737336919939, fd=<optimized out>, write=write@entry=true) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_fd.cpp:215
#2  0x00007ffff6f80448 in __tsan::FdClose (thr=thr@entry=0x7ffff6be7780, pc=<optimized out>, fd=fd@entry=3, write=write@entry=true) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_fd.cpp:247
#3  0x00007ffff6f94788 in __interceptor_close (fd=fd@entry=3) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1770
#4  0x00007ffff701d945 in __asan_backtrace_close (descriptor=descriptor@entry=3, error_callback=error_callback@entry=0x7ffff700f2f0 <__sanitizer::(anonymous namespace)::ErrorCallback(void*, char const*, int)>, data=data@entry=0x7fffffffd6e0) at /home/marxin/Programming/gcc/libsanitizer/libbacktrace/../../libbacktrace/posix.c:98
#5  0x00007ffff702bf6b in elf_add (state=state@entry=0x7ffff6f4a000, filename=filename@entry=0x7ffff7039105 "/proc/self/exe", descriptor=descriptor@entry=3, memory=memory@entry=0x0, memory_size=memory_size@entry=0, base_address=base_address@entry=0, error_callback=<optimized out>, data=<optimized out>, fileline_fn=0x7fffffffd588, found_sym=0x7fffffffd580, found_dwarf=0x7fffffffd584, fileline_entry=0x0, exe=1, debuginfo=0, with_buildid_data=0x0, with_buildid_size=0) at /home/marxin/Programming/gcc/libsanitizer/libbacktrace/../../libbacktrace/elf.c:4629
#6  0x00007ffff702ccd8 in __asan_backtrace_initialize (state=state@entry=0x7ffff6f4a000, filename=filename@entry=0x7ffff7039105 "/proc/self/exe", descriptor=3, error_callback=error_callback@entry=0x7ffff700f2f0 <__sanitizer::(anonymous namespace)::ErrorCallback(void*, char const*, int)>, data=data@entry=0x7fffffffd6e0, fileline_fn=fileline_fn@entry=0x7fffffffd628) at /home/marxin/Programming/gcc/libsanitizer/libbacktrace/../../libbacktrace/elf.c:4877
#7  0x00007ffff701d708 in fileline_initialize (state=state@entry=0x7ffff6f4a000, error_callback=error_callback@entry=0x7ffff700f2f0 <__sanitizer::(anonymous namespace)::ErrorCallback(void*, char const*, int)>, data=data@entry=0x7fffffffd6e0) at /home/marxin/Programming/gcc/libsanitizer/libbacktrace/../../libbacktrace/fileline.c:261
#8  0x00007ffff701d7a6 in __asan_backtrace_pcinfo (state=0x7ffff6f4a000, pc=140737334433327, callback=0x7ffff700f540 <__sanitizer::(anonymous namespace)::SymbolizeCodePCInfoCallback(void*, uintptr_t, char const*, int, char const*)>, error_callback=0x7ffff700f2f0 <__sanitizer::(anonymous namespace)::ErrorCallback(void*, char const*, int)>, data=0x7fffffffd6e0) at /home/marxin/Programming/gcc/libsanitizer/libbacktrace/../../libbacktrace/fileline.c:295
#9  0x00007ffff700f34a in __sanitizer::LibbacktraceSymbolizer::SymbolizePC (this=0x7ffff6f3e000, addr=140737334433327, stack=<optimized out>) at /home/marxin/Programming/gcc/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cpp:163
#10 0x00007ffff701168d in __sanitizer::Symbolizer::SymbolizePC (this=0x7ffff6f3e018, addr=addr@entry=140737334433327) at /home/marxin/Programming/gcc/libsanitizer/sanitizer_common/sanitizer_symbolizer_libcdep.cpp:95
#11 0x00007ffff6ff457a in __tsan::SymbolizeCode (addr=addr@entry=140737334433327) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_symbolize.cpp:106
#12 0x00007ffff6fec8b1 in __tsan::SymbolizeStack (trace=...) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_rtl_report.cpp:112
#13 0x00007ffff6fed999 in __tsan::ScopedReportBase::AddMemoryAccess (this=this@entry=0x7fffffffd9a0, addr=addr@entry=135360189300736, external_tag=0, s=..., s@entry=..., tid=0, stack=..., mset=mset@entry=0x7ffff6be7a80) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_rtl_report.cpp:190
#14 0x00007ffff6ff0b5b in __tsan::ReportRace (thr=<optimized out>, shadow_mem=<optimized out>, cur=..., old=..., typ0=0) at /home/marxin/Programming/gcc/libsanitizer/tsan/tsan_rtl_report.cpp:816
#15 0x00000000004011d6 in bar (mem=0x7b1c00000000) at /home/marxin/Programming/gcc/gcc/testsuite/c-c++-common/tsan/free_race.c:11
#16 0x0000000000401223 in main () at /home/marxin/Programming/gcc/gcc/testsuite/c-c++-common/tsan/free_race.c:17
```

So it's caused by `__tsan::FdClose` that happens in `libbacktrace` where the slot is already likely locked in `__tsan::ReportRace`.
@dvyukov
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzlWVtv2zYU_jXOCxFDInV98EPqrEOBDShW7FmgSCrWIokCSSVxf_0OqatlO2ibrh02wRDFiw6_832HFEnnkh93HzY4rhGXZfOAft3vUS3Ug0CFkjXqWm2UoDWiDUcfUCNNyQRHFGqF-CyQLhsGTRPi86hgiecxVmDMfOalSZIUTBBBWCJyhlmaYqTEU6lL2WzI3ca733h3f2rbqTmADVlV8tnlhDaMajE1OhjTapvD7-H3UJpDl2-ZrG2Gsdu6VEqqPgP3vJI5JDXVRsyl1qjuSiPgmd1CSYjfudstGKoBETTR1CbWs0xRJras7364R97w67M4QGAZwQsHWQvXoXoprYGPSj4oWtfgy9T9FRAA4VUA6LaAstKUn4GNe3MAKTh0GcEPbaEp3crOjIASUOyzAAvpCW4LlOdo0fQdmHlsQW6D_A3eI-_Fgysu4IoK0LBIUNmgLHN4gHZy96mS5jfJHoHQVR7QJEqwTunyyWLckL1sTVkDYo5sj-QX2wVAf62y1NdqU0TNl5JclfnIlprptEmmTLU9APAwJT0H7iFF7hq9AVcAZ2YJJO8mVoE8CyOfeCYe-l9SBp776MTH93xfSS1QTxzg8V56SnIRx4lngbYMiv3Ai0lMSJT6aUpSW17w6849KztEyH2fBp5ojDra-Fed-G7uFXzL2hacwH44-YfPlA2CM2XPvLb3GeUVDq746niA2_w--QkUBPFEAVlRkAZxMlAAE4ZQTLRGqoyNFFx04DsBXHSos1bq8mUA7MfxNA-T4ARx7Pk8DcIeMbVWcsoejZ1PZ9BcaKZKaxfwLjIrFYT9sGSMVpW1AaWrgjPRY5gJcOEhEDvLZq9c2EC3tJHNsZadRg2thW4Bk5tsbPUv1vR-tIyTJ1nyDb6zMNiBKsRko81QALy491wEcWqo9cImZ4Dg4pHw3qQIZCcKIbvdjrdVxSAQ-JImkzjhShycw8iw4oiqyCi3X7NEG-qCvU_PR1IRUDDgRktZCUudDbnx8YIIJPW9ECxji0pJ65OG_iARL8IVA21fFgK1qKXLDQ_L3ry5Qab7T_Qyt2hqG-awpLEeK6Ht1H2SXTU9i7srk8cg_bWpBRiqykZkRXMaEGGSuHrZNTzTx3pd6821_JmqYl0fnFhf8WEZhhm_pzjvHsqmkKNfz7B0y_KurHgJpnvww2snVQOZPyZsITBc0AbRtHDCJFqHLWM8uTinlLZHWkGn_45Q_q9NXOs4XuYuv4WTHxs3STx_PeOzb1HsubiZYH9rvPyHJP0B4ox0O4Vw5E8CJecC0ejiwG6ZnbqWIp2LcrK6DQJCCI4dS7NMCzXC4JvU-HSsc2kDZi-5-Lj_AKgua9OBFq1Rmbku1Fn5qNxZeP38KPrpYZPOG4N0FTZeQQLah82KlN8WFifl1ErJj_t-9-A2cVNYETGElV0WXA4sCMXrC4I3EDQ9Z9NpxFykJzeyJV_jWjxa7A-91ejyo4RfpOnrqfGTBTUumWeYM6Z-DBWMi3ZgYRErvn-6gyqCMKZnxwPLQW09_ucdW-6sJj9GEb1oxo9P8QuW5P5V_J9sRDrJ3Bgi91s7sL7fGUSmRCuVGXH6eMZJVjh5mqZnOJlsBf_D2Xg3HCqSuzvOf3cr9TvGYP29iDiXXPx0pdR7JQBJSCII0ZQAHBL1C2HYvDa0ygx9GBfAeuTHPs5vD0Wm5FPDYZwPNbUWxu4ubHLxpIEmb5sgXyc9nTfbfrAKbi8P8zXpPd1_QDzMhyRXNin6QLl8zmDfdL0N69RMhaz4grFj6715o_Cq74m_GBjh4Ht_BTC9cbd2yKk71OudAFVyn42Nvg7ZNx4Tu4Exw4zWMDEmFmZN4bb52uXxGzDFl4_O3f2TRCV882MNi6VOg975EUGTCwdtUIrMAQAfaNuKRltXoOzk0w1Nng9CCfdXgq6kQaVGtLLn5UdUlY-igsSevvLh7cvhChXbAWTg8adj9yifbviO8JSk9MaUphK74T3Un7a7fytu7d8VN52qdq_8VVFVT2NyCzu5vwQD99-XWndCw0MYYhzdHHY4EWGQRDiyH73Ujwoax0HAuZ-SIvHi9Kaiuaj0bhOCArgRz8iZsFvB8P6m3GEPYy_0sA_zI062ecgFzWkAq1zOI1gIw_QBcVBtLY6tVA83aucgwVbdTklVCTrPlVTr8qERwnUH9mlnDlLt-oC5cT3vHPK_AQ8yTws">