summaryrefslogtreecommitdiffstats
path: root/lib/libpthread/thread/thr_init.c
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2005-09-24 01:19:53 +0000
committerbrian <brian@FreeBSD.org>2005-09-24 01:19:53 +0000
commit07adfc3d98d69f8a0bc6828588bde6785f3d08b4 (patch)
tree9cfd706f8848e787805d497398e496a7fcaf985f /lib/libpthread/thread/thr_init.c
parent0b524fa9c8ccacdec0c6299d368e15d2a78e83a7 (diff)
downloadFreeBSD-src-07adfc3d98d69f8a0bc6828588bde6785f3d08b4.zip
FreeBSD-src-07adfc3d98d69f8a0bc6828588bde6785f3d08b4.tar.gz
Modify the code path of the ifdef NOTYET part of _kse_single_thread():
o Don't reinitialise the atfork() handler list in the child. We are meant to call the child handler, and on subsequent fork()s should call all three functions as normal. o Don't reinitialise the thread specific keyed data in the child after a fork. Applications may require this for context. o Reinitialise curthread->tlflags after removing ourselves from (and reinitialising) the various internal thread lists. o Reinitialise __malloc_lock in the child after fork() (to balance our explicitly taking the lock prior to the fork()). With these changes, it is possible to enable the NOTYET code in thr_kern.c to allow the use of non-async-safe functions after fork()ing from a threaded program. Reviewed by: Daniel Eischen <deischen@freebsd.org> [_malloc_lock reinitialisation has since been moved to avoid polluting the !NOTYET code]
Diffstat (limited to 'lib/libpthread/thread/thr_init.c')
-rw-r--r--lib/libpthread/thread/thr_init.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/libpthread/thread/thr_init.c b/lib/libpthread/thread/thr_init.c
index c143627..e5439ad 100644
--- a/lib/libpthread/thread/thr_init.c
+++ b/lib/libpthread/thread/thr_init.c
@@ -437,6 +437,7 @@ init_private(void)
}
_pthread_attr_default.guardsize_attr = _thr_guard_default;
_pthread_attr_default.stacksize_attr = _thr_stack_default;
+ TAILQ_INIT(&_thr_atfork_list);
init_once = 1; /* Don't do this again. */
} else {
/*
@@ -453,7 +454,6 @@ init_private(void)
/* Initialize everything else. */
TAILQ_INIT(&_thread_list);
TAILQ_INIT(&_thread_gc_list);
- TAILQ_INIT(&_thr_atfork_list);
_pthread_mutex_init(&_thr_atfork_mutex, NULL);
/*
OpenPOWER on IntegriCloud