https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64144
Bug ID: 64144
Summary: std::async can deadlock during thread exit
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
#include <future>
std::future<void> fut;
struct A {
~A() { fut.wait(); }
};
thread_local A a;
void f() { (void)&a; }
int main()
{
fut = std::async(std::launch::async, f);
}
While the async thread is exiting the thread local destructor checks the status
of the future, detects it is ready, then blocks waiting for the thread to exit,
which won't happen until the destructor finishes.