]> sourceware.org Git - newlib-cygwin.git/commitdiff
Fix sigwait and pthread_kill return values in case of error
authorCorinna Vinschen <corinna@vinschen.de>
Fri, 30 Oct 2015 15:05:43 +0000 (16:05 +0100)
committerCorinna Vinschen <corinna@vinschen.de>
Fri, 30 Oct 2015 15:05:43 +0000 (16:05 +0100)
* 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>
winsup/cygwin/ChangeLog
winsup/cygwin/release/2.3.0
winsup/cygwin/signal.cc
winsup/cygwin/thread.cc

index 337a1d2d6717d5284fb312c73b0bbf1ff300e676..3fb4372ac1ce617e6cd2ba63ac94e03632355dfe 100644 (file)
@@ -1,3 +1,9 @@
+2015-10-30  Corinna Vinschen  <corinna@vinschen.de>
+
+       * 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.
+
 2015-10-29  Qian Hong  <qhong@codeweavers.com>
 
        * init.cc (munge_threadfunc): Check that we're actually replacing
index c6f70aa4b7ac6eca9abe5066fd37787216799264..1cad81b62739e30f4f910b85e9a723a4d7c30d21 100644 (file)
@@ -53,3 +53,7 @@ Bug Fixes
 
 - Fix a potential SEGV on (at least) Wine.
   Addresses: https://cygwin.com/ml/cygwin/2015-10/msg00018.html
+
+- Fix sigwait(3) to return errno instead of -1 and never to return with EINTR.
+
+- Fix pthread_kill(3) to return errno instead of -1.
index 4897417d4b5ff9e1abdce7f9c456a71f7b6d4291..8dfd4ab63c09e3cdff4ff8971c27f5a5cd336960 100644 (file)
@@ -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
index d9b62111ff9c131c2f8a235d67e09ea3edf5b284..ff845901554840513b87c39726fabd73da3ac19e 100644 (file)
@@ -3056,7 +3056,11 @@ pthread_kill (pthread_t thread, int sig)
   if (!thread->valid)
     rval = ESRCH;
   else if (sig)
-    rval = sig_send (NULL, si, thread->cygtls);
+    {
+      rval = sig_send (NULL, si, thread->cygtls);
+      if (rval == -1)
+       rval = get_errno ();
+    }
   else
     switch (WaitForSingleObject (thread->win32_obj_id, 0))
       {
This page took 0.040747 seconds and 5 git commands to generate.