From f41d402bd44b6c1f1a1b17129cec24216b148dc8 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 3 Aug 2017 14:55:21 +0200 Subject: [PATCH] Revert "cygwin/signal.h: Remove SI_QUEUE unimplemented comment" This reverts commit 54ed68a781fe8a36d08352503524e61534a25e07. --- winsup/cygwin/include/cygwin/signal.h | 3 ++- winsup/cygwin/signal.cc | 35 +++++++++++---------------- 2 files changed, 16 insertions(+), 22 deletions(-) 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