diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2015-10-30 16:05:43 +0100 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2015-10-30 16:05:43 +0100 |
commit | 8f97c045b8e65784071fd097fc32a1f16b855b3b (patch) | |
tree | 396d30de65dba1a54afe97023f37ad1dd8fe1184 /winsup/cygwin/signal.cc | |
parent | ff3c4a7d2fd686543140b0d39177c3464d1444e1 (diff) | |
download | cygnal-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.cc | 10 |
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 |