diff --git a/posix/tst-nice.c b/posix/tst-nice.c index ac78d60..814891d 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 42bb99b..8f6daaf 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); }