Fix BZ #18086 -- nice resets errno to 0.
authorPaul Pluzhnikov <ppluzhnikov@google.com>
Wed, 12 Aug 2015 06:40:00 +0000 (23:40 -0700)
committerPaul Pluzhnikov <ppluzhnikov@google.com>
Wed, 12 Aug 2015 06:40:00 +0000 (23:40 -0700)
ChangeLog
NEWS
posix/tst-nice.c
sysdeps/posix/nice.c

index af87ce2..24e029e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-08-11  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+       [BZ #18086]
+       * sysdeps/posix/nice.c (nice): Restore old errno.
+       * posix/tst-nice.c (do_test): Add test for BZ #18086.
+
 2015-08-10  Ondrej Bilka  <neleai@seznam.cz>
 
        * sysdeps/powerpc/powerpc64/multiarch/stpcpy.c: Fix ifunc.
diff --git a/NEWS b/NEWS
index 1b11ce7..c6a2c2c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,8 +9,9 @@ Version 2.23
 
 * The following bugs are resolved with this release:
 
-  16517, 16519, 17905, 18265, 18480, 18525, 18618, 18647, 18661, 18674,
-  18778, 18781, 18787, 18789, 18790.
+  16517, 16519, 17905, 18086, 18265, 18480, 18525, 18618, 18647, 18661,
+  18674, 18778, 18781, 18787, 18789, 18790.
+
 \f
 Version 2.22
 
index ac78d60..814891d 100644 (file)
@@ -56,8 +56,17 @@ do_test (void)
       return 1;
     }
 
-  printf ("PASS: nice(%d) from %d return: %d\n", incr, old, ret);
+  /* BZ #18086. Make sure we don't reset errno.  */
+  errno = EBADF;
+  nice (0);
+  if (errno != EBADF)
+    {
+      printf ("FAIL: errno = %i, but wanted EBADF (%i)\n", errno, EBADF);
+      return 1;
+    }
+
 
+  printf ("PASS: nice(%d) from %d return: %d\n", incr, old, ret);
   return 0;
 }
 
index 42bb99b..8f6daaf 100644 (file)
@@ -36,16 +36,16 @@ nice (int incr)
     {
       if (errno != 0)
        return -1;
-      else
-       __set_errno (save);
     }
 
   result = __setpriority (PRIO_PROCESS, 0, prio + incr);
   if (result == -1)
     {
       if (errno == EACCES)
-       errno = EPERM;
+       __set_errno (EPERM);
       return -1;
     }
+
+  __set_errno (save);
   return __getpriority (PRIO_PROCESS, 0);
 }