summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/signal.cc
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2015-10-30 16:05:43 +0100
committerCorinna Vinschen <corinna@vinschen.de>2015-10-30 16:05:43 +0100
commit8f97c045b8e65784071fd097fc32a1f16b855b3b (patch)
tree396d30de65dba1a54afe97023f37ad1dd8fe1184 /winsup/cygwin/signal.cc
parentff3c4a7d2fd686543140b0d39177c3464d1444e1 (diff)
downloadcygnal-8f97c045b8e65784071fd097fc32a1f16b855b3b.tar.gz
cygnal-8f97c045b8e65784071fd097fc32a1f16b855b3b.tar.bz2
cygnal-8f97c045b8e65784071fd097fc32a1f16b855b3b.zip
Fix sigwait and pthread_kill return values in case of error
* signal.cc (sigwait): Fix return value to reflect errno in case of error according to POSIX. Never return EINTR. * thread.cc (pthread_kill): Return errno if sig_send failed. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/cygwin/signal.cc')
-rw-r--r--winsup/cygwin/signal.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/winsup/cygwin/signal.cc b/winsup/cygwin/signal.cc
index 4897417d4..8dfd4ab63 100644
--- a/winsup/cygwin/signal.cc
+++ b/winsup/cygwin/signal.cc
@@ -557,10 +557,16 @@ siginterrupt (int sig, int flag)
extern "C" int
sigwait (const sigset_t *set, int *sig_ptr)
{
- int sig = sigwaitinfo (set, NULL);
+ int sig;
+
+ do
+ {
+ sig = sigwaitinfo (set, NULL);
+ }
+ while (sig == -1 && get_errno () == EINTR);
if (sig > 0)
*sig_ptr = sig;
- return sig > 0 ? 0 : -1;
+ return sig > 0 ? 0 : get_errno ();
}
extern "C" int