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

    <tr>
        <th>Summary</th>
        <td>
            [tsan] Intermittent crash in FdClose
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            compiler-rt:tsan
      </td>
    </tr>

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

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

<pre>
    We are seeing an intermittent tsan crash with the signature:

```
ThreadSanitizer: CHECK failed: sanitizer_common.h:511 "((i)) < ((size_))" (0xffffffff, 0x1b) (tid=3303510)
    #0 __tsan::CheckUnwind() /root/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp:672:25 (bitcoind+0x119492)
    #1 __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) /root/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_termination.cpp:86:5 (bitcoind+0x9a274)
    #2 __tsan::ScopedReportBase::AddLocation(unsigned long, unsigned long) /root/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp (bitcoind+0x12ad1e)
    #3 __tsan::ReportRace(__tsan::ThreadState*, __tsan::RawShadow*, __tsan::Shadow, __tsan::Shadow, unsigned long) /root/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_report.cpp:801:7 (bitcoind+0x12d1f6)
    #4 __tsan::DoReportRace(__tsan::ThreadState*, __tsan::RawShadow*, __tsan::Shadow, __tsan::Shadow, unsigned long) /root/llvm-project/compiler-rt/lib/tsan/rtl/tsan_rtl_access.cpp:166:3 (bitcoind+0x11cd00)
    #5 __tsan::FdClose(__tsan::ThreadState*, unsigned long, int, bool) /root/llvm-project/compiler-rt/lib/tsan/rtl/tsan_fd.cpp (bitcoind+0xb0170)
    #6 closedir /root/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1876:5 (bitcoind+0xb9cc5)
    #7 leveldb::(anonymous namespace)::PosixEnv::GetChildren(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*) src/./src/leveldb/util/env_posix.cc:599:5 (bitcoind+0xb96dce)
    #8 leveldb::DBImpl::DeleteObsoleteFiles() src/./src/leveldb/db/db_impl.cc:237:9 (bitcoind+0xb5db09)
    #9 leveldb::DBImpl::BackgroundCompaction() src/./src/leveldb/db/db_impl.cc:752:5 (bitcoind+0xb624bd)
    #10 leveldb::DBImpl::BackgroundCall() src/./src/leveldb/db/db_impl.cc:687:5 (bitcoind+0xb61c58)
    #11 leveldb::DBImpl::BGWork(void*) src/./src/leveldb/db/db_impl.cc:676:34 (bitcoind+0xb61b8b)
    #12 leveldb::(anonymous namespace)::PosixEnv::BackgroundThreadMain() src/./src/leveldb/util/env_posix.cc:830:5 (bitcoind+0xb9a55a)
    #13 leveldb::(anonymous namespace)::PosixEnv::BackgroundThreadEntryPoint(leveldb::(anonymous namespace)::PosixEnv*) src/./src/leveldb/util/env_posix.cc:736:10 (bitcoind+0xb9a55a)
    #14 void std::__invoke_impl<void, void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*>(std::__invoke_other, void (*&&)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*&&) /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61:14 (bitcoind+0xb9a637)
    #15 std::__invoke_result<void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*>::type std::__invoke<void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*>(void (*&&)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*&&) /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:96:14 (bitcoind+0xb9a637)
    #16 void std::thread::_Invoker<std::tuple<void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_thread.h:253:13 (bitcoind+0xb9a637)
    #17 std::thread::_Invoker<std::tuple<void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*> >::operator()() /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_thread.h:260:11 (bitcoind+0xb9a637)
    #18 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(leveldb::(anonymous namespace)::PosixEnv*), leveldb::(anonymous namespace)::PosixEnv*> > >::_M_run() /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_thread.h:211:13 (bitcoind+0xb9a637)
    #19 <null> <null> (libstdc++.so.6+0xdc2b2) (BuildId: f57e02bfadacc0c923c82457d5e18e1830b5faea)
    #20 __tsan_thread_start_func /root/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1012:15 (bitcoind+0xb41a8)
    #21 <null> <null> (libc.so.6+0x94b42) (BuildId: 69389d485a9793dbe873f0ea2c93e02efaa9aa3d)
    #22 <null> <null> (libc.so.6+0x1269ff) (BuildId: 69389d485a9793dbe873f0ea2c93e02efaa9aa3d)
```

This bug exists since commit 9fb8058a8079b3a9a8af0aff0f4b6898960d331f, thus it is shipped in version 14.0.6 and 15.0.6/7

This bug was fixed in commit d848186a3beed36b0bd6842b3cbdb3e7809b2848, thus it will be fixed in the upcoming 16.0.0-rc1

Can the fix be backported to the 15 branch?

/cherry-pick d848186a3beed36b0bd6842b3cbdb3e7809b2848
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWdly47gV_Rr6BWUVFi7ggx5kuTXpSroyNZ3UPLKwUUJMASwAtNXz9SmAVNsSpWn3Mj2diYumSKznnnNxsZB5r7dGqWVW3GXF_Q0bws665TvmhN2w7kHdcCs_LH9VgDkFvFLabAEzQJug3F6HoEwAwTMDhGN-B5502IGwUyA2y8LgVEZWGbzP4PFewulKr__aOcXke2Z00L8pl5EVWP_tzfrvoGW6UzK--2NmI-x-b81il5FVgRDIMM4wzTDVGa4zXIOMrMGY4vVvqhlTM4xjIjy001-G1wAeEE81MA1aZuSeEEgKBGP5hAsAADJMIGiaaF00gqzWOyUe_m2etJGpm1h_46wNGd503eP-tnf2P0rEV2H3ve6Uu3UpU_MMb1JDeONCN700LnQL0fcZWZUVzsgKFxER10HY1McdPCBU5zU-x4VA0_gXpB3BbUbWMBU75oCwxocMr6LF2oT4M0sfTHIACTprtul2LfUzrT2X7SQpOY9hQVszEUDLqOrM_JrhKj-3Hp-o8l7YXslfVG9duGNejakrKf9hReohw_TEnpmB30bJxiUI0Z65iphJpM7tICd2jBb8woTKMH2ZMY2RwIKaRDupxp7e75i0TxfyjhnXUv9YFqKqEGVkVV3gQ6K2POcjP4F5b_8ijDAhlPcTI6iMjk4ujHMh4Sz-FCcwN3LdWf9pMmbePg1-bm33DWxq5UUf5xBVMwNKICJkqd3X9ppmHKH6YJ1veuv14cgorS7HDl4LUZwDqkCnHlUn-Uhehikz1nzY28EDw_bK98nd6jH759jPG_M4vv2kwnqnO-lUjCk-yDG5acThgND4wpnXovHBabPNyDrG20j9x8IxoQmO6eCP2eTNSQnWdTFwWfecD-L_FLXLk8KPSowlvzOaq2W-Nysf8ayiZ3snMrxZxLkmPR21xpsh6OhKyjwenUdEp6nrK65TSjGL1_TUd-7v3u77bnpWnQrqn9zb-LvRnfLTEuE6pOnW6H3fjXAwqTKyqudwCslhfQ6nvg7njomHrbODkWu775mYpsHPxVMV-DI9Jc65nC1K4KsAsa77Aiglra5AQaKgMyjod6D89Kt1Dxmmj1bLT_rNBSQp3JD8EhRO-QwK_oqI80zbGOXfMf1pHS-7OiXwiquzomAz1OQbon5jgvvws02zEP2iZr9sdFckKoXga23OQXQJ8CKEafNoH1QSPyPr0WHWY6kkwyptML7Cptjcl9aOUY_OwdqwU24Gs0zXnwf2CCAuAwbvPk70WxGVPNCyKfPbTpvhcLs1Q4Y3CEWtF_ObNqIbpIoLhwzfpWsszOPsEfMjDWmXWMbpB10YqTUrSTXTv7ggvVN-6MIk_o8hekoLH3o1h_tD4Rwj7P-3B9blZ3lgeRaBQoqfk8ZvU7Mni6ww9N0PJTr46KDNu2efhEMXm0VDdx603hqpDs3RjLNy30EqH2QzkpzkwgWJes23Z1f0qv4SUtleubS0TiuL56Ot70t9Gdcn6VjvVdTTK9SnjfBxxv7fVudkMLnB_FnKpF3c6wdFOog1Q9eNJjw_Ytpp7oOcel14uyhTQ1Jgjqfz2LtBd_JtOvlti0pBzFsmmRBQ1JgIivOikoVCVCFKIC9apmYLOXw8tp2saHxgLjTtYMQfdwoBUdwroQsL7Byx2QYFo98lSTxzU-c8v8BNWRNay5wWrK5qIrmiFWmhYljUREGsWsZqxshsk4bxaztGuKzb9hv0fHbkfzz41x7wYQvUQfvggddGKCDsfq8DqFtOYUEZhVXNCasZZS1kbQvbnJe0pnUJJSEoHeWH3eCBDkB74He675UE2oBH5by2BqB8ARclYEYCVMTHDG-qiziemAetPozVJxyS5hTRkhGulCQlh1yWNMecCC45URWFNcc0py9xPOmuA1w9txV2Cgy9sHtttgCVC7iAt06glyDWbCzW6kOsypl46K0LSoJgUwYqAHfMiF1GNidfU_BG7JRzH257LR5ejfdGLomsSc1u1BKVFSmKqkTVzW6pGOQEIsp4S_KcEoVZzlmNuWxhWUByo5cYYgIRwhjBsqgWtEK8raEqqBCwbVWWQ7VnulvE4bWwbnujvR_UsqjrqrzpGFedTx-bMH454shqHGs4K-5v3DKNTT5sfZbDLvrHc3NBhy59rkoVinvw9uWnqPErlDZgOiu9GVy33IXQ-xSANzFe6rAb-ELY_RQE5rEgQY6RMKH-bwAAAP__EkUm5A">