blob: 9c3479335bd982c5e5ac12ba5771361708a0e80a [file] [log] [blame] [edit]
#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;
}