diff options
author | Rich Felker <dalias@aerifal.cx> | 2020-06-21 02:15:50 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2020-06-21 02:15:50 -0400 |
commit | 8ed2bd8bfcb4ea6448afb55a941f4b5b2b0398c0 (patch) | |
tree | 5f3e5a115873b05aadf78ff3a5590ffd3a0fa9ca /src | |
parent | fca7428c096066482d8c3f52450810288e27515c (diff) | |
download | musl-8ed2bd8bfcb4ea6448afb55a941f4b5b2b0398c0.tar.gz musl-8ed2bd8bfcb4ea6448afb55a941f4b5b2b0398c0.tar.xz musl-8ed2bd8bfcb4ea6448afb55a941f4b5b2b0398c0.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/process/fork.c | 1 |
1 files changed, 1 insertions, 0 deletions
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); |