diff options
Diffstat (limited to 'src/process')
-rw-r--r-- | src/process/fork.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/process/fork.c b/src/process/fork.c index 80e804b1..56f19313 100644 --- a/src/process/fork.c +++ b/src/process/fork.c @@ -37,6 +37,7 @@ static void dummy(int x) { } weak_alias(dummy, __fork_handler); weak_alias(dummy, __malloc_atfork); weak_alias(dummy, __aio_atfork); +weak_alias(dummy, __pthread_key_atfork); weak_alias(dummy, __ldso_atfork); static void dummy_0(void) { } @@ -51,6 +52,7 @@ pid_t fork(void) int need_locks = libc.need_locks > 0; if (need_locks) { __ldso_atfork(-1); + __pthread_key_atfork(-1); __aio_atfork(-1); __inhibit_ptc(); for (int i=0; i<sizeof atfork_locks/sizeof *atfork_locks; i++) @@ -78,6 +80,7 @@ pid_t fork(void) else **atfork_locks[i] = 0; __release_ptc(); if (ret) __aio_atfork(0); + __pthread_key_atfork(!ret); __ldso_atfork(!ret); } __restore_sigs(&set); |