musl - musl - an implementation of the standard library for Linux-based systems

index : musl
musl - an implementation of the standard library for Linux-based systems
summary refs log tree commit diff
path: root/src/process
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2022年10月07日 21:36:25 -0400
committerRich Felker <dalias@aerifal.cx>2022年10月19日 14:01:32 -0400
commitcf76df0e1fe09b0d504ca650fdaa01df5bf9ab72 (patch)
tree6a3841d780547892c723d11221aaea3e5fa3f85c /src/process
parent5ff3eea91fa6bdce25b3a35644433f68e076beca (diff)
downloadmusl-cf76df0e1fe09b0d504ca650fdaa01df5bf9ab72.tar.gz
fix missing synchronization of pthread TSD keys with MT-fork
commit 167390f05564e0a4d3fcb4329377fd7743267560 seems to have overlooked the presence of a lock here, probably because it was one of the exceptions not using LOCK() but a rwlock. as such, it can't be added to the generic table of locks to take, so add an explicit atfork function for the pthread keys table. the order it is called does not particularly matter since nothing else in libc but pthread_exit interacts with keys.
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);
generated by cgit v1.2.1 (git 2.18.0) at 2025年09月28日 03:08:44 +0000

AltStyle によって変換されたページ (->オリジナル) /