<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/76807>76807</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[libc++] Hangs in std::condition_variable_any when used with std::stop_token
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libc++
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
alexbatashev
</td>
</tr>
</table>
<pre>
The following piece of code appears to work reliably and correctly (or at least the way that I expect it to work) with `libstdc++`, but sporadically hangs with the latest `libc++`:
```c++
#include <thread>
#include <stop_token>
#include <mutex>
#include <condition_variable>
#include <iostream>
class thread {
public:
thread() {
thread_ = std::jthread([this](std::stop_token st) {
while (!st.stop_requested()) {
std::unique_lock lock{m_};
cv_.wait(lock, st, []{ return false; });
}
});
}
private:
std::mutex m_;
std::condition_variable_any cv_;
std::jthread thread_;
};
int main() {
thread t;
#ifdef _LIBCPP_VERSION
std::cout << "libc++\n";
#else
std::cout << "libstdc++\n";
#endif
}
```
Results with `libstdc++` and Clang 18. The process exits almost immediately with exit code 0.
![image](https://github.com/llvm/llvm-project/assets/829678/cd3f9a87-87f7-40de-a81d-40c4a55f7d9e)
`libc++` with Clang 18 commit d933b88b71b00461815667d7cd0bb2fecd8606db. Sometimes it works fine, but sometimes it would hang forever until the process is killed from outside.
![image](https://github.com/llvm/llvm-project/assets/829678/ff1e03b8-f3d4-4084-bc76-61ca4fc2fc17)
I also tested with commit 7e186d366d6c7def0543acc255931f617e76dff0 with the same result.
https://godbolt.org/z/hjTheTnon
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VkuP2zYQ_jX0ZWCDIvU8-BB7Y3SBog2SoFeDIocWs5ToiKP1ur--kLx-bXZR9FDBoAHNg_N9w_lEFaPbdYhLlq1Y9jBTAzWhXyqPL7UiFRt8ntXBHJffGwQbvA8H1-1g71AjBAs6GAS136PqI1CAQ-ifoEfvVO2PoDoDOvQ9avJHYKIMPSgCjyoSUINwUEegRhE8Ar7sURM4OqdhooKDowZYzr2rIxnNxGr85ZyJNdQDQdyHXhmnlfdHaFS3i6eQMbdXhJFeo29C5SfGHxg_rzk__c4ep7dCuk77wSAwuaamR2WY_PyeMVLYbyk8YfeBQzsQvnxg06Ezjlzots-qHznDDxxdiNSjaq_madVexQin-oAVr9Xvh9o7fQEKAK8uTJQjqxfH19dbYPIBIpkxRH76cXXOVtS4yLIHJsqL_YoYIt3nu3kOjfMI045JpMUU1OPPASPhayEfxo7PZbuhcz8H3Pqgn2BcWLFqt6x4YPIcqZ-3i4NyxEQ5OYj1VNgaToeaFSvokYa-A6t8RCZXMMaL6pri5hlNp5fvOF2M-949K8I7ki8lTy2HdnsNvZh-7fhWdccRwt0-b5tx7tTF6ZaA0-o6gla57pcmX9oPdI9FSGcNWtj-_rhaf_my_evz12-Pf_7xThU6DDQeQybXwIS4Gahs3TEh3ubFkeZfkL_NcTPSH6TpjLNXvPcDe4v9K8bBU_xQLyYlWnvV7SApFzCK2b4PGmMEfHEUQfk2RALXtmicIvTHU67RehI5vjjPZcKylWvVDk9z0RDt4whRbJjY7Bw1Q73QoWVi4_3z-W--78MP1MTERsWIFJnYlKLKi5KJjTbSVqos5mVhi3nKDc5VmZh5ynWqsswWpsLxJN7r1p2snco9QwQd2tYRmErKuizrIqk5T_OkTLI8L0yhDa9rYVGbMue5qRfwLbRIrsU4KvAovxGs6_AitPfmwZtJbsGGHp-xh6Ej5yfZPfPqIjw579GA7UMLYaDoDP6PJFqbIJd1ObfSpPOUl-m81kU-zxOtUquF1UnxhsRHUD4GoEmTTgy-EldgUuZG5rnJdWHQ8iyVSmuRZZVMbJ4UWOTGWn793ETVIvTTOVzc7vEGWTB18LQI_Y6Jzd9MbJof3xv83oXu5D4zS2kqWakZLpOCp6LkScZnzbJSiS1rndsqxzSrEpvmgmtEq2wqlalmbim4SHnCZZLwKuELrEqdyyyVZVmnlRQs5dgq5xcjlWMFMxfjgMsiL3kx86pGH6d7wN2ACzHeC_rlxH897CJLuXeR4jUNOfLTDeJWFx7gt-l77Lp_Fb9Dgx0M8dyCdz40s6H3y_98RiZ44xmZEP4TAAD__9HOpHo">