[PATCH] Call _thr_check_init() from _pthread_once

From: Ryan Stone <rysto32_at_gmail.com>
Date: Tue, 19 Apr 2011 12:53:54 -0400
In r179417 the implementation of pthread_once in libthr was changed
from using a global pthread_mutex_t for synchronization to rolling its
own synchronization mechanism.  Unfortunately, this introduced a bug.
Calling _pthread_mutex_lock implicitly ensured that _thr_check_init()
had been called.  In the current version, there is no such guarantee.
This means that if your first call into libthr is pthread_once, your
executable will segfault when it tries to access curthread.  This
patch resolves the issue for me:

Index: lib/libthr/thread/thr_once.c
===================================================================
--- lib/libthr/thread/thr_once.c        (revision 220603)
+++ lib/libthr/thread/thr_once.c        (working copy)
_at__at_ -64,6 +64,8 _at__at_
        struct pthread *curthread;
        int state;

+       _thr_check_init();
+
        for (;;) {
                state = once_control->state;
                if (state == ONCE_DONE)

If there are no objections I'll commit this soon.
Received on Tue Apr 19 2011 - 14:53:56 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:13 UTC