<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/138152>138152</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Unsynchronized access to `disconnecting` in lldb-dap
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JDevlieghere
</td>
</tr>
</table>
<pre>
TSan report:
```
WARNING: ThreadSanitizer: data race (pid=7657)
Write of size 1 at 0x00016d0e1fb0 by thread T4:
#0 std::__1::__async_func<lldb_dap::DAP::Loop()::$_0>::operator()[abi:nn190102]() future:1827 (lldb-dap:arm64+0x100023230)
#1 std::__1::__async_assoc_state<lldb::SBError, std::__1::__async_func<lldb_dap::DAP::Loop()::$_0>>::__execute() future:841 (lldb-dap:arm64+0x100023084)
#2 void* std::__1::__thread_proxy[abi:nn190102]<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct>>, void (std::__1::__async_assoc_state<lldb::SBError, std::__1::__async_func<lldb_dap::DAP::Loop()::$_0>>::*)(), std::__1::__async_assoc_state<lldb::SBError, std::__1::__async_func<lldb_dap::DAP::Loop()::$_0>>*>>(void*) <null> (lldb-dap:arm64+0x100025874)
Previous read of size 1 at 0x00016d0e1fb0 by main thread:
#0 lldb_dap::DAP::Loop() DAP.cpp:941 (lldb-dap:arm64+0x100016218)
#1 main lldb-dap.cpp:606 (lldb-dap:arm64+0x100005f08)
Location is stack of main thread.
Thread T4 (tid=492699, running) created by main thread at:
#0 pthread_create <null> (libclang_rt.tsan_osx_dynamic.dylib:arm64e+0x32af8)
#1 lldb_dap::DAP::Loop() DAP.cpp:868 (lldb-dap:arm64+0x100016170)
#2 main lldb-dap.cpp:606 (lldb-dap:arm64+0x100005f08)
SUMMARY: ThreadSanitizer: data race future:1827 in
std::__1::__async_func<lldb_dap::DAP::Loop()::$_0>::operator()[abi:nn190102]()
```
On the main thread:
```
frame #13: 0x0000000104626254 lldb-dap`lldb_dap::DAP::Loop(this=0x000000016b7eda08) at DAP.cpp:943:16 [opt]
940 StopEventHandlers();
941 });
942
-> 943 while (!disconnecting || !m_queue.empty()) {
944 std::unique_lock<std::mutex> lock(m_queue_mutex);
945 m_queue_cv.wait(lock, [&] { return disconnecting || !m_queue.empty(); });
946
```
On the `stdin/stdout.transport_handler` thread:
```
frame #8: 0x0000000104633234 lldb-dap`std::__1::__async_func<lldb_dap::DAP::Loop()::$_0>::operator()[abi:nn190102]() [inlined] lldb_dap::DAP::Loop(this=<unavailable>)::$_0::operator()() const::'lambda'()::operator()() const at DAP.cpp:872:25 [opt]
869 llvm::set_thread_name(transport.GetClientName() + ".transport_handler");
870 auto cleanup = llvm::make_scope_exit([&]() {
871 // Ensure we're marked as disconnecting when the reader exits.
-> 872 std::unique_lock<std::mutex> lock(m_queue_mutex);
873 disconnecting = true;
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMV9uO2zYQ_Rr6hViDInV98IN82bRFkgbZDYI-CZQ0ttmVSYUXr52vL6jLru04uw3aIhUWWElDzcw5c2ZIc2PERgLMUDRH0XLCnd0qPfttCftGwGYLGialqo-z-zsusYZWaYtYjkiOYjL8kfxz_vH9r-_fIJbj-60GXt9xKaz4Ctq_qrnlWPMKMKJpK2rElkkcJYhmiOQYf9bCAlZrbMRXwAHmFpMDISSIawLBuiS4PGLbucX3YR8cI8oINrb2jywvimC84eYoq2LtZIXYomnqsqh52xuX-Yf-5q1SLaKpT6B7RjQsCGKr_km1oLlVelgRzXkpEMulDDISEIqiZW_Ba2edBsTyIKWJx-bD3fThuN7FIaJzcggIIZRRRka82CcfvJA8N0ZVhbHcwoCht9_NV1r7vBb_AfLV6AYOUDkLlxjTMHgFIknDM4gU75WoEc2vZtsXtGi1OhyvcswW335mXdvAVYuT4ouDorX6qvkpnrHaVfY6hTWsuWtsUUMD9nqYSz89c3TRQfX8_D-rimjujf2SFwP9pCxpPt6kg2i8-BBbSNc0iK1ell6UJoP0OvV90LAXyhncjYxXBsuOCzlMl2G09Ool-FUYeJl_mFatX5C90h1BTIP0YgB0kccvBj8xiV_0Q6I1SU-gvlUVt0JJLAw2llcPHu4JpOmw8H4cn9677UZwmNE469SgnZRCbjyiSgO3UF8Qg7m94KYd2qBff1koUVYNl5tC26k1XBbKHIr6KPlOVNP62IhyxAUdMEb5eiSnY-ZHmE_j9BXmg4RczKV_zvzdp3fv8o9_vLrhnW8RQmJE8p-7a13s3Ijkv_syw7eNcLpsrfkOuuIwD7BrI38FJIxpTKPwiU4Uk5fzt1thEFs-u4jLBGreketb9LSpfLAgxiiaq9Z6CF0Rs5Dg7rqzql3tQdpfuKwb0GakZz4uDLqaJ8vztxSR_MaLNQsZftyKpjuZIBrUwlRKSqiskBuMkgVKFhjRYFd8ceBgCrvWHscxmmGUPLkMn8fisBU1qno43UN2zsLBB-0MNB18Fv37s_wiPBqr_fSRC-uF2X218FwgGqNo6aNjDdZpiX8kbzY_JyQL4-9qAsXE2FpIRG-NrZWzU6u5NP4QWGx7zlFMzlXzHeGk3-iGMcrOdPOTj3MomgvZCAm1Z_dviRixhZN8z0XDS38wWV3mcCWBPlilpLHj0qThu7LmiCanML7_3XmbpAlFLKfRZZukcYabZr_rvRmw49lF8p0_3j2VcvoG7KIRIO373tKxQecYUXql4JQ-iydNhlb0F3dW4aoBLl2LEVueRN_xByhMpVoo4NDp-UnHY7yxl9LEb6W3iN7ilTROA34ERBPtJ5R-gBpzc6H3xy30cvXoQGMfwUzHHk8T-u_1Zpqwy2ZjS2y1g37Jk_Qn9YzVGcv4BGZBEsZBwLKQTLYzknAeVazkWcjDOmEcyjguS1JWcRmuaTQRM0poRCISBBHLCJnWEXCS1CxKWZQEKUMhgR0XzdTTO1V6MxHGOJgFLA0iOml4CY3pfs9RKuERd1ZftWg50TP_0U3pNgaFpBHGmmc3VtgGZp-kb7mtVlJ89WxXFRiDrfLD4Ay67_yTfXTidDPbWtuaTtO-gBtht66cVmqH6G0nhv7fTavVn-CP4bddcgbR2yH7_Yz-FQAA__8RbC4K">