posix_spawn_wrapper: do not set POSIX_SPAWN_SETSIGDEF flag
authorMike Gilbert <floppym@gentoo.org>
Thu, 24 Oct 2024 16:24:35 +0000 (12:24 -0400)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 13 Nov 2024 19:48:10 +0000 (19:48 +0000)
Setting this flag is a noop without a corresponding call to
posix_spawnattr_setsigdefault.

If we call posix_spawnattr_setsigdefault with a full signal set,
it causes glibc's posix_spawn implementation to call sigaction 63 times,
once for each signal. That seems wasteful.

This feature is really only useful for signals which have their
disposition set to SIG_IGN. Otherwise the dispostion gets set to
SIG_DFL automatically, either by clone(CLONE_CLEAR_SIGHAND) or the
subsequent execve.

As far as I can tell, systemd does not have any signals set to SIG_IGN
under normal operating conditions.

(cherry picked from commit ff94426f8a2d6cd4ea2e370835db152917a1684e)

src/basic/process-util.c

index de5a1469b989cd86ab67d17ede7987ec8eb63834..d9e8bc9fc999bd55b332d364ce62cdea85295f5d 100644 (file)
@@ -2036,7 +2036,7 @@ int posix_spawn_wrapper(
                 const char *cgroup,
                 PidRef *ret_pidref) {
 
-        short flags = POSIX_SPAWN_SETSIGMASK|POSIX_SPAWN_SETSIGDEF;
+        short flags = POSIX_SPAWN_SETSIGMASK;
         posix_spawnattr_t attr;
         sigset_t mask;
         int r;