From 8ed2bd8bfcb4ea6448afb55a941f4b5b2b0398c0 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sun, 21 Jun 2020 02:15:50 -0400 Subject: clear need_locks in child after fork the child is single-threaded, but may still need to synchronize with last changes made to memory by another thread in the parent, so set need_locks to -1 whereby the next lock-taker will drop to 0 and prevent further barriers/locking. --- src/process/fork.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/process/fork.c b/src/process/fork.c index fb42478a..7e984ff8 100644 --- a/src/process/fork.c +++ b/src/process/fork.c @@ -30,6 +30,7 @@ pid_t fork(void) self->next = self->prev = self; __thread_list_lock = 0; libc.threads_minus_1 = 0; + if (libc.need_locks) libc.need_locks = -1; } __restore_sigs(&set); __fork_handler(!ret); -- cgit v1.2.1