]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
missing: add rt_sigqueueinfo() syscall definition
authorLennart Poettering <lennart@poettering.net>
Wed, 30 Oct 2019 15:29:42 +0000 (16:29 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 4 Dec 2019 09:34:03 +0000 (10:34 +0100)
This is not a new system call at all (since kernel 2.2), however it's
not exposed in glibc (a wrapper is exposed however in sigqueue(), but it
substantially simplifies the system call). Since we want a nice fallback
for sending signals on non-pidfd systems for pidfd_send_signal() let's
wrap rt_sigqueueinfo() since it takes the same siginfo_t parameter.

meson.build
src/basic/missing_syscall.h

index edde42ea74a6223b998e6145d1107843138454fb..3085af49fd7e19ebf5b7cdf1eebf10e0e169e079 100644 (file)
@@ -525,6 +525,10 @@ foreach ident : [
                                  #include <unistd.h>
                                  #include <signal.h>
                                  #include <sys/wait.h>'''],
+        ['rt_sigqueueinfo',   '''#include <stdlib.h>
+                                 #include <unistd.h>
+                                 #include <signal.h>
+                                 #include <sys/wait.h>'''],
 ]
 
         have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE')
index bea7be699d45dfb769937e5c44d043e0851c2f3b..cbda3f7c6054793213c883e02933fd1b5a81a247 100644 (file)
@@ -562,3 +562,9 @@ static inline int pidfd_send_signal(int fd, int sig, siginfo_t *info, unsigned f
 #endif
 }
 #endif
+
+#if !HAVE_RT_SIGQUEUEINFO
+static inline int rt_sigqueueinfo(pid_t tgid, int sig, siginfo_t *info) {
+        return syscall(__NR_rt_sigqueueinfo, tgid, sig, info);
+}
+#endif