about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2020-06-21 02:15:50 -0400
committerRich Felker <dalias@aerifal.cx>2020-06-21 02:15:50 -0400
commit8ed2bd8bfcb4ea6448afb55a941f4b5b2b0398c0 (patch)
tree5f3e5a115873b05aadf78ff3a5590ffd3a0fa9ca /src
parentfca7428c096066482d8c3f52450810288e27515c (diff)
downloadmusl-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.c1
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);