mirror of git://git.musl-libc.org/musl
fix broken thread list unlocking after fork
apparently Linux clears the registered exit futex address on fork. this means that, if after forking the child process becomes multithreaded and the original thread exits, the thread list will never be unlocked, and future attempts to use the thread list will deadlock. re-register the exit futex address after _Fork in the child to ensure that it's preserved.
This commit is contained in:
parent
4653b98711
commit
0c277ff156
|
@ -22,7 +22,7 @@ pid_t _Fork(void)
|
|||
#endif
|
||||
if (!ret) {
|
||||
pthread_t self = __pthread_self();
|
||||
self->tid = __syscall(SYS_gettid);
|
||||
self->tid = __syscall(SYS_set_tid_address, &__thread_list_lock);
|
||||
self->robust_list.off = 0;
|
||||
self->robust_list.pending = 0;
|
||||
self->next = self->prev = self;
|
||||
|
|
Loading…
Reference in New Issue