diff mbox series

nptl: Mention libstdc++ compatibility for pthread_once

Message ID 871rdhhgyq.fsf@oldenburg.str.redhat.com
State Under Review
Delegated to: Florian Weimer
Headers show
Series nptl: Mention libstdc++ compatibility for pthread_once | expand

Commit Message

Florian Weimer Feb. 15, 2021, 8:29 a.m. UTC
---
 nptl/pthread_once.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/nptl/pthread_once.c b/nptl/pthread_once.c
index 28d97097c7..702d1c0877 100644
--- a/nptl/pthread_once.c
+++ b/nptl/pthread_once.c
@@ -61,7 +61,15 @@  clear_once_control (void *arg)
    interrupted cases anymore.
    XXX: We split out this slow path because current compilers do not generate
    as efficient code when the fast path in __pthread_once below is not in a
-   separate function.  */
+   separate function.
+
+   Compatibility note: The implementation of std::call_once in
+   libstdc++ before GCC 11 does not call pthread_once if the control
+   object has the value __PTHREAD_ONCE_DONE (2).  libstdc++ starting
+   in GCC 11 uses the values 0 (uninitialized), 1 (in progress), 2
+   (done) for its own from-scratch implementation.  These
+   implementations can operate on the same control object if libstdc++
+   is statically linked.  */
 static int
 __attribute__ ((noinline))
 __pthread_once_slow (pthread_once_t *once_control, void (*init_routine) (void))