musl/src/process
Rich Felker 3c5c5e6f92 optimize posix_spawn to avoid spurious sigaction syscalls
the trick here is that sigaction can track for us which signals have
ever had a signal handler set for them, and only those signals need to
be considered for reset. this tracking mask may have false positives,
since it is impossible to remove bits from it without race conditions.
false negatives are not possible since the mask is updated with atomic
operations prior to making the sigaction syscall.

implementation-internal signals are set to SIG_IGN rather than SIG_DFL
so that a signal raised in the parent (e.g. calling pthread_cancel on
the thread executing pthread_spawn) does not have any chance make it
to the child, where it would cause spurious termination by signal.

this change reduces the minimum/typical number of syscalls in the
child from around 70 to 4 (including execve). this should greatly
improve the performance of posix_spawn and other interfaces which use
it (popen and system).

to facilitate these changes, sigismember is also changed to return 0
rather than -1 for invalid signals, and to return the actual status of
implementation-internal signals. POSIX allows but does not require an
error on invalid signal numbers, and in fact returning an error tends
to confuse applications which wrongly assume the return value of
sigismember is boolean.
2013-08-09 21:03:47 -04:00
..
i386
x86_64
execl.c
execle.c
execlp.c
execv.c
execve.c
execvp.c consistently use the internal name __environ for environ 2013-02-17 14:24:39 -05:00
fdop.h overhaul posix_spawn to use CLONE_VM instead of vfork 2013-02-03 16:42:40 -05:00
fexecve.c debloat code that depends on /proc/self/fd/%d with shared function 2013-08-02 12:59:45 -04:00
fork.c block signals during fork 2013-08-08 23:17:05 -04:00
posix_spawn.c optimize posix_spawn to avoid spurious sigaction syscalls 2013-08-09 21:03:47 -04:00
posix_spawn_file_actions_addclose.c
posix_spawn_file_actions_adddup2.c overhaul posix_spawn to use CLONE_VM instead of vfork 2013-02-03 16:42:40 -05:00
posix_spawn_file_actions_addopen.c use restrict everywhere it's required by c99 and/or posix 2008 2012-09-06 22:44:55 -04:00
posix_spawn_file_actions_destroy.c
posix_spawn_file_actions_init.c
posix_spawnattr_destroy.c
posix_spawnattr_getflags.c use restrict everywhere it's required by c99 and/or posix 2008 2012-09-06 22:44:55 -04:00
posix_spawnattr_getpgroup.c use restrict everywhere it's required by c99 and/or posix 2008 2012-09-06 22:44:55 -04:00
posix_spawnattr_getsigdefault.c use restrict everywhere it's required by c99 and/or posix 2008 2012-09-06 22:44:55 -04:00
posix_spawnattr_getsigmask.c use restrict everywhere it's required by c99 and/or posix 2008 2012-09-06 22:44:55 -04:00
posix_spawnattr_init.c
posix_spawnattr_sched.c fix up minor misplacement of restrict keyword in spawnattr sched stubs 2013-02-01 15:57:28 -05:00
posix_spawnattr_setflags.c
posix_spawnattr_setpgroup.c
posix_spawnattr_setsigdefault.c use restrict everywhere it's required by c99 and/or posix 2008 2012-09-06 22:44:55 -04:00
posix_spawnattr_setsigmask.c use restrict everywhere it's required by c99 and/or posix 2008 2012-09-06 22:44:55 -04:00
posix_spawnp.c fix parent-memory-clobber in posix_spawn (environ) 2012-10-18 16:41:27 -04:00
system.c remove cruft from pre-posix_spawn version of the system function 2013-03-24 22:40:54 -04:00
vfork.c
wait.c
waitid.c
waitpid.c