Date: Wed, 20 Apr 2011 14:19:34 +0000 (UTC) From: Ryan Stone <rstone@FreeBSD.org> To: cvs-src-old@freebsd.org Subject: cvs commit: src/lib/libthr/thread thr_once.c Message-ID: <201104201419.p3KEJfOk016008@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
rstone 2011-04-20 14:19:34 UTC FreeBSD src repository Modified files: lib/libthr/thread thr_once.c Log: SVN rev 220888 on 2011-04-20 14:19:34Z by rstone r179417 introduced a bug into pthread_once(). Previously pthread_once() used a global pthread_mutex_t for synchronization. r179417 replaced that with an implementation that directly used atomic instructions and thr_* syscalls to synchronize callers to pthread_once. However, calling pthread_mutex_lock on the global mutex implicitly ensured that _thr_check_init() had been called but with r179417 this was no longer guaranteed. This meant that if you were unlucky enough to have your first call into libthr be a call to pthread_once(), you would segfault when trying to access the pointer returned by _get_curthread(). The fix is to explicitly call _thr_check_init() from pthread_once(). Reviewed by: davidxu Approved by: emaste (mentor) MFC after: 1 week Revision Changes Path 1.8 +2 -0 src/lib/libthr/thread/thr_once.c
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104201419.p3KEJfOk016008>