nice(): Correct return value and [EPERM] error.
PR: 189821 Obtained from: NetBSD Relnotes: yes
This commit is contained in:
parent
d792cd9231
commit
e220ce08ef
@ -72,11 +72,6 @@ ATF_TC_BODY(nice_err, tc)
|
||||
{
|
||||
int i;
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
atf_tc_expect_fail("nice(incr) with incr < 0 fails with unprivileged "
|
||||
"users and sets errno == EPERM; see PR # 189821 for more details");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The call should fail with EPERM if the
|
||||
* supplied parameter is negative and the
|
||||
@ -98,11 +93,7 @@ ATF_TC_HEAD(nice_priority, tc)
|
||||
|
||||
ATF_TC_BODY(nice_priority, tc)
|
||||
{
|
||||
#ifdef __FreeBSD__
|
||||
int i, pri, pri2, nic;
|
||||
#else
|
||||
int i, pri, nic;
|
||||
#endif
|
||||
pid_t pid;
|
||||
int sta;
|
||||
|
||||
@ -115,10 +106,8 @@ ATF_TC_BODY(nice_priority, tc)
|
||||
pri = getpriority(PRIO_PROCESS, 0);
|
||||
ATF_REQUIRE(errno == 0);
|
||||
|
||||
#ifdef __NetBSD__
|
||||
if (nic != pri)
|
||||
atf_tc_fail("nice(3) and getpriority(2) conflict");
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Also verify that the nice(3) values
|
||||
@ -130,18 +119,10 @@ ATF_TC_BODY(nice_priority, tc)
|
||||
if (pid == 0) {
|
||||
|
||||
errno = 0;
|
||||
#ifdef __FreeBSD__
|
||||
pri = getpriority(PRIO_PROCESS, 0);
|
||||
#else
|
||||
pri2 = getpriority(PRIO_PROCESS, 0);
|
||||
#endif
|
||||
ATF_REQUIRE(errno == 0);
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if (pri != pri2)
|
||||
#else
|
||||
if (nic != pri)
|
||||
#endif
|
||||
_exit(EXIT_FAILURE);
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
@ -180,11 +161,7 @@ ATF_TC_HEAD(nice_thread, tc)
|
||||
ATF_TC_BODY(nice_thread, tc)
|
||||
{
|
||||
pthread_t tid[5];
|
||||
#ifdef __FreeBSD__
|
||||
int pri, rv, val;
|
||||
#else
|
||||
int rv, val;
|
||||
#endif
|
||||
size_t i;
|
||||
|
||||
/*
|
||||
@ -196,12 +173,7 @@ ATF_TC_BODY(nice_thread, tc)
|
||||
val = nice(i);
|
||||
ATF_REQUIRE(val != -1);
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
pri = getpriority(PRIO_PROCESS, 0);
|
||||
rv = pthread_create(&tid[i], NULL, threadfunc, &pri);
|
||||
#else
|
||||
rv = pthread_create(&tid[i], NULL, threadfunc, &val);
|
||||
#endif
|
||||
ATF_REQUIRE(rv == 0);
|
||||
|
||||
rv = pthread_join(tid[i], NULL);
|
||||
|
@ -28,7 +28,7 @@
|
||||
.\" @(#)nice.3 8.1 (Berkeley) 6/4/93
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.Dd June 4, 1993
|
||||
.Dd February 22, 2015
|
||||
.Dt NICE 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -57,11 +57,34 @@ Only the super-user may lower priorities.
|
||||
.Pp
|
||||
Children inherit the priority of their parent processes via
|
||||
.Xr fork 2 .
|
||||
.Sh RETURN VALUES
|
||||
Upon successful completion,
|
||||
.Fn nice
|
||||
returns the new nice value minus
|
||||
.Dv NZERO .
|
||||
Otherwise, \-1 is returned, the process' nice value is not changed, and
|
||||
.Va errno
|
||||
is set to indicate the error.
|
||||
.Sh ERRORS
|
||||
The
|
||||
.Fn nice
|
||||
function will fail if:
|
||||
.Bl -tag -width Er
|
||||
.It Bq Er EPERM
|
||||
The
|
||||
.Fa incr
|
||||
argument is negative and the caller does not have appropriate privileges.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr nice 1 ,
|
||||
.Xr fork 2 ,
|
||||
.Xr setpriority 2 ,
|
||||
.Xr renice 8
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn nice
|
||||
function conforms to
|
||||
.St -xpg4.2 .
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Fn nice
|
||||
|
@ -43,14 +43,18 @@ __FBSDID("$FreeBSD$");
|
||||
* Backwards compatible nice.
|
||||
*/
|
||||
int
|
||||
nice(incr)
|
||||
int incr;
|
||||
nice(int incr)
|
||||
{
|
||||
int prio;
|
||||
|
||||
errno = 0;
|
||||
prio = getpriority(PRIO_PROCESS, 0);
|
||||
if (prio == -1 && errno)
|
||||
return (-1);
|
||||
return (setpriority(PRIO_PROCESS, 0, prio + incr));
|
||||
return -1;
|
||||
if (setpriority(PRIO_PROCESS, 0, prio + incr) == -1) {
|
||||
if (errno == EACCES)
|
||||
errno = EPERM;
|
||||
return -1;
|
||||
}
|
||||
return getpriority(PRIO_PROCESS, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user