diff options
Diffstat (limited to 'sysdeps/mach/hurd/fork.c')
-rw-r--r-- | sysdeps/mach/hurd/fork.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/sysdeps/mach/hurd/fork.c b/sysdeps/mach/hurd/fork.c index 9973b1bb9e..9e863a8033 100644 --- a/sysdeps/mach/hurd/fork.c +++ b/sysdeps/mach/hurd/fork.c @@ -108,12 +108,6 @@ __fork (void) /* Run things that prepare for forking before we create the task. */ RUN_HOOK (_hurd_fork_prepare_hook, ()); - /* Acquire malloc locks. This needs to come last because fork - handlers may use malloc, and the libio list lock has an - indirect malloc dependency as well (via the getdelim - function). */ - call_function_static_weak (__malloc_fork_lock_parent); - /* Lock things that want to be locked before we fork. */ { void *const *p; @@ -124,6 +118,13 @@ __fork (void) } __mutex_lock (&_hurd_siglock); + /* Acquire malloc locks. This needs to come last because fork + handlers may use malloc, and the libio list lock has an + indirect malloc dependency as well (via the getdelim + function). */ + call_function_static_weak (__malloc_fork_lock_parent); + _hurd_malloc_fork_prepare (); + newtask = MACH_PORT_NULL; thread = sigthread = MACH_PORT_NULL; newproc = MACH_PORT_NULL; @@ -612,6 +613,7 @@ __fork (void) } /* Release malloc locks. */ + _hurd_malloc_fork_parent (); call_function_static_weak (__malloc_fork_unlock_parent); /* Run things that want to run in the parent to restore it to @@ -666,6 +668,7 @@ __fork (void) __sigemptyset (&_hurdsig_traced); /* Release malloc locks. */ + _hurd_malloc_fork_child (); call_function_static_weak (__malloc_fork_unlock_child); /* Run things that want to run in the child task to set up. */ |