On Sat, 20 Jan 2024 10:13:22 +0100 ASSI wrote: > Takashi Yano via Cygwin writes: > > I might find the culprit in gcc's libstdc++ code such as: > > libstdc++-v3/include/ext/concurrentce.h: > > class __mutex > > { > > private: > > #if __GTHREADS && defined __GTHREAD_MUTEX_INIT > > __gthread_mutex_t _M_mutex = __GTHREAD_MUTEX_INIT; > > #else > > __gthread_mutex_t _M_mutex; > > #endif > > > > __GTHREAD_MUTEX_INIT here is PTHREAD_MUTEX_INITIALIZER and > > __gthread_mutex_t is pthread_mutex_t. > > > > I think this code vaiolates the POSIX statement. > > So what happens if you undefine __GTHREAD_MUTEX_INIT?
I have tried. The test case: #include <mutex> int main() { for (;;) { std::mutex *m = new std::mutex; m->lock(); m->unlock(); delete m; } return 0; } gets working fine. However, this test case: #include <future> int func() { return 0; } int main() { for (;;) { std::future<int> f = std::async(std::launch::async, func); f.get(); } return 0; } still has the problem. pthread_mutex_t might be initialized also at another place... -- Takashi Yano <takashi.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple