diff options
author | David Xu <davidxu@FreeBSD.org> | 2005-04-02 01:20:00 +0000 |
---|---|---|
committer | David Xu <davidxu@FreeBSD.org> | 2005-04-02 01:20:00 +0000 |
commit | a091d823ad89a36935ba6e5568c4720a35f9a99b (patch) | |
tree | 6aaef5f553a6539306bd6f5679d039ed3c2abcce /lib/libthr/thread/thr_atfork.c | |
parent | 824a5e96dc28e3a2b48c4eb714bfb98efff1c8c4 (diff) |
Notes
Diffstat (limited to 'lib/libthr/thread/thr_atfork.c')
-rw-r--r-- | lib/libthr/thread/thr_atfork.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/libthr/thread/thr_atfork.c b/lib/libthr/thread/thr_atfork.c index 214424ab6bc3..370623a2c83a 100644 --- a/lib/libthr/thread/thr_atfork.c +++ b/lib/libthr/thread/thr_atfork.c @@ -23,16 +23,13 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * + * $FreeBSD$ */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <errno.h> #include <stdlib.h> #include <pthread.h> #include <sys/queue.h> - #include "thr_private.h" __weak_reference(_pthread_atfork, pthread_atfork); @@ -41,20 +38,20 @@ int _pthread_atfork(void (*prepare)(void), void (*parent)(void), void (*child)(void)) { + struct pthread *curthread; struct pthread_atfork *af; - if (_thread_initial == NULL) - _thread_init(); + _thr_check_init(); if ((af = malloc(sizeof(struct pthread_atfork))) == NULL) return (ENOMEM); + curthread = _get_curthread(); af->prepare = prepare; af->parent = parent; af->child = child; - _pthread_mutex_lock(&_atfork_mutex); - TAILQ_INSERT_TAIL(&_atfork_list, af, qe); - _pthread_mutex_unlock(&_atfork_mutex); + THR_UMTX_LOCK(curthread, &_thr_atfork_lock); + TAILQ_INSERT_TAIL(&_thr_atfork_list, af, qe); + THR_UMTX_UNLOCK(curthread, &_thr_atfork_lock); return (0); } - |