diff options
author | brian <brian@FreeBSD.org> | 2005-09-24 01:19:53 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2005-09-24 01:19:53 +0000 |
commit | 07adfc3d98d69f8a0bc6828588bde6785f3d08b4 (patch) | |
tree | 9cfd706f8848e787805d497398e496a7fcaf985f /lib/libpthread/thread/thr_init.c | |
parent | 0b524fa9c8ccacdec0c6299d368e15d2a78e83a7 (diff) | |
download | FreeBSD-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.c | 2 |
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); /* |