diff --git a/winsup/cygwin/include/cygwin/signal.h b/winsup/cygwin/include/cygwin/signal.h index a8c852ddb..af0833688 100644 --- a/winsup/cygwin/include/cygwin/signal.h +++ b/winsup/cygwin/include/cygwin/signal.h @@ -265,7 +265,8 @@ enum SI_MESGQ, /* sent by real time mesq state change (currently unimplemented) */ SI_TIMER, /* sent by timer expiration */ - SI_QUEUE, /* sent by sigqueue */ + SI_QUEUE, /* sent by sigqueue (currently + unimplemented) */ SI_KERNEL, /* sent by system */ ILL_ILLOPC, /* illegal opcode */ diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc index 4b63e9917..fbd2b241e 100644 --- a/winsup/cygwin/signal.cc +++ b/winsup/cygwin/signal.cc @@ -623,26 +623,6 @@ sigwaitinfo (const sigset_t *set, siginfo_t *info) return res; } -int -__SYS_rt_sigqueueinfo (pid_t pid, int sig, siginfo_t *si) -{ - pinfo dest (pid); - if (!dest) - { - set_errno (ESRCH); - return -1; - } - if (sig == 0) - return 0; - if (sig < 0 || sig >= NSIG - || !si || si->si_code < SI_ASYNCIO || si->si_code > SI_KERNEL) - { - set_errno (EINVAL); - return -1; - } - return sig_send (dest, *si); -} - /* FIXME: SUSv3 says that this function should block until the signal has actually been delivered. Currently, this will only happen when sending signals to the current process. It will not happen when sending signals @@ -651,10 +631,23 @@ extern "C" int sigqueue (pid_t pid, int sig, const union sigval value) { siginfo_t si = {0}; + pinfo dest (pid); + if (!dest) + { + set_errno (ESRCH); + return -1; + } + if (sig == 0) + return 0; + if (sig < 0 || sig >= NSIG) + { + set_errno (EINVAL); + return -1; + } si.si_signo = sig; si.si_code = SI_QUEUE; si.si_value = value; - return __SYS_rt_sigqueueinfo (pid, sig, &si); + return sig_send (dest, si); } extern "C" int