Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Async signal safety of fork()

According to Oracle's Multithreaded Programming Guide, fork() should be safe-to-use inside signal handlers. But my process got stuck inside signal handler with to following back trace:

 #0  __lll_lock_wait_private () at   ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
 #1  0x00007f86e6a9990d in _L_lock_48 () from /lib/x86_64-linux- gnu/libc.so.6
 #2  0x00007f86e6a922ec in ptmalloc_lock_all () at arena.c:242
 #3  0x00007f86e6ad5e82 in __libc_fork () at ./nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:95
 #4  0x00007f86e7d9f125 in __fork () at ./nptl/sysdeps/unix/sysv/linux/pt-fork.c:25
....
 #7  signal handler called

So as malloc is not safe to be use in signal handler how fork can be?

Thanks in advance.

like image 723
Eyal leshem Avatar asked Dec 29 '16 12:12

Eyal leshem


1 Answers

This is now listed as a bug by RedHat:

Bug 1422161 - glibc: fork is not async-signal-safe

...

+++ This bug was initially created as a clone of Bug #1422159 +++

POSIX requires that fork is async-signal-safe. Our current implementation is not.

like image 163
Andrew Henle Avatar answered Oct 06 '22 08:10

Andrew Henle