#include <signal.h> | |
#include <string.h> | |
#include <unistd.h> | |
#include "pthread_impl.h" | |
#include "lock.h" | |
int pthread_sigqueue(pthread_t t, int sig, const union sigval value) | |
{ | |
siginfo_t si; | |
int r; | |
memset(&si, 0, sizeof si); | |
si.si_signo = sig; | |
si.si_code = SI_QUEUE; | |
si.si_value = value; | |
si.si_uid = getuid(); | |
si.si_pid = getpid(); | |
LOCK(t->killlock); | |
r = t->tid ? -__syscall(SYS_rt_tgsigqueueinfo, si.si_pid, t->tid, sig, &si) | |
: (sig+0U >= _NSIG ? EINVAL : 0); | |
UNLOCK(t->killlock); | |
return r; | |
} |