fix breakage in synccall due to incorrect signal restoration in sigqueue
[musl] / src / signal / sigqueue.c
1 #include <signal.h>
2 #include <string.h>
3 #include <unistd.h>
4 #include <stdint.h>
5 #include "syscall.h"
6 #include "pthread_impl.h"
7
8 int sigqueue(pid_t pid, int sig, const union sigval value)
9 {
10         siginfo_t si;
11         sigset_t set;
12         int r;
13         memset(&si, 0, sizeof si);
14         si.si_signo = sig;
15         si.si_code = SI_QUEUE;
16         si.si_value = value;
17         si.si_uid = getuid();
18         __block_app_sigs(&set);
19         si.si_pid = getpid();
20         r = syscall(SYS_rt_sigqueueinfo, pid, sig, &si);
21         __restore_sigs(&set);
22         return r;
23 }