https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103187
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|11.4 |11.3 Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Jonathan Wakely from comment #2) > The relevant commit seems to be g:aeaea265cea3a2b2e772af7825351a4ceef29aac > but that *should* only be an optimization to use futexes when available. Ah no, because the HAVE_PLATFORM_WAIT macro was being set, but too late to affect the value of the __platform_wait_uses_type variable template, it meant that _S_wait_addr always returned &_M_w._M_ver and did a futex wait on that, but the semaphore release() was doing a futex wake on &_M_counter instead. > The > fact it times out without that change suggests the non-futex code has a bug, > and it's probably still there on trunk. I think it's fixed by the above commit, which is in GCC 11.3 and later.