[PATCH] Call _thr_check_init() from _pthread_once
David Xu
davidxu at freebsd.org
Wed Apr 20 02:13:57 UTC 2011
On 2011/04/20 00:53, Ryan Stone wrote:
> 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)
> @@ -64,6 +64,8 @@
> 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.
Have you tested that current code causes segfault ?
anyway, I can not reproduce it on my machne.
Regards,
David Xu
More information about the freebsd-current
mailing list