summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Pluzhnikov <ppluzhnikov@google.com>2015-08-11 23:40:00 -0700
committerPaul Pluzhnikov <ppluzhnikov@google.com>2015-08-11 23:40:00 -0700
commit84895dca70f972df3842fb88f7b33b5d695cc599 (patch)
treeade512ca77f27f09e58435878cec1c640dfaed88
parent5011051da35a91577d262040791cbe5a868cffbd (diff)
downloadglibc-84895dca70f972df3842fb88f7b33b5d695cc599.tar.gz
Fix BZ #18086 -- nice resets errno to 0.
-rw-r--r--ChangeLog6
-rw-r--r--NEWS5
-rw-r--r--posix/tst-nice.c11
-rw-r--r--sysdeps/posix/nice.c6
4 files changed, 22 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index af87ce2ace..24e029eda7 100644
--- 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 1b11ce73d3..c6a2c2c324 100644
--- 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.
+
Version 2.22
diff --git a/posix/tst-nice.c b/posix/tst-nice.c
index ac78d6056f..814891deb6 100644
--- a/posix/tst-nice.c
+++ b/posix/tst-nice.c
@@ -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;
}
diff --git a/sysdeps/posix/nice.c b/sysdeps/posix/nice.c
index 42bb99b7e1..8f6daaffbf 100644
--- a/sysdeps/posix/nice.c
+++ b/sysdeps/posix/nice.c
@@ -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);
}