From c0f3519d2e841dbaad086091f610cebc8178e7f6 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 28 May 2000 22:14:55 +0000 Subject: Update. * posix/Makefile (tests): Add tst-fork. --- linuxthreads/ptfork.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'linuxthreads/ptfork.c') diff --git a/linuxthreads/ptfork.c b/linuxthreads/ptfork.c index cb6d46db8c..440d66c4a3 100644 --- a/linuxthreads/ptfork.c +++ b/linuxthreads/ptfork.c @@ -78,25 +78,29 @@ extern int __libc_fork(void); pid_t __fork(void) { pid_t pid; - struct handler_list * prepare, * child, * parent; pthread_mutex_lock(&pthread_atfork_lock); - prepare = pthread_atfork_prepare; - child = pthread_atfork_child; - parent = pthread_atfork_parent; - pthread_mutex_unlock(&pthread_atfork_lock); - pthread_call_handlers(prepare); + + pthread_call_handlers(pthread_atfork_prepare); __pthread_once_fork_prepare(); + pid = __libc_fork(); + if (pid == 0) { __pthread_reset_main_thread(); + __fresetlockfiles(); - pthread_call_handlers(child); __pthread_once_fork_child(); + pthread_call_handlers(pthread_atfork_child); + + pthread_mutex_init(&pthread_atfork_lock, NULL); } else { - pthread_call_handlers(parent); __pthread_once_fork_parent(); + pthread_call_handlers(pthread_atfork_parent); + + pthread_mutex_unlock(&pthread_atfork_lock); } + return pid; } -- cgit v1.2.1