[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#286825: glibc: nice() should set errno=EPERM not EACCES on error



At Fri, 24 Dec 2004 09:42:30 +0000,
Gerrit Pape wrote:
> 
> On Fri, Dec 24, 2004 at 04:51:30PM +0900, GOTO Masanori wrote:
> > At Wed, 22 Dec 2004 14:12:04 +0000,
> > Gerrit Pape wrote:
> > > Hi, according to the man page and
> > > http://www.opengroup.org/onlinepubs/009695399/functions/nice.html
> > > nice() should set errno=EPERM in case the incr argument is negative and
> > > the calling process does not have appropriate privileges.
> 
> > It's like old BSD vs SysV question.  This behavior written in SUS is
> > SysV derived.  However, BSD returns EACCES like glibc.  Look at info
> > libc, it describes as follows:
> > 
> >  - Function: int nice (int INCREMENT)
> >      Increment the nice value of the calling process by INCREMENT.  The
> >      return value is the new nice value on success, and `-1' on
> >      failure.  In the case of failure, `errno' will be set to the same
> >      values as for `setpriority'.
> 
> I stumbled across this because the diet libc and also the uclibc use the
> Linux kernel's implementation (on most archs) which sets errno=EPERM

Indeed.  Almost architecture defines __ARCH_WANT_SYS_NICE, but some
architectures do not assign even system call number.

> The dietlibc showed different behavior on ia64 where __NR_nice is not
> defined; I fixed this for consistency
> 
> #ifndef __NR_nice
> int nice(int i) {
>   if (setpriority(PRIO_PROCESS,0,getpriority(PRIO_PROCESS,0)+i) == -1) {
>     errno=EPERM;
>     return -1;
>   }
>   return getpriority(PRIO_PROCESS,0);
> }
> #endif
> 
> It bothered me that glibc's implementation and the Linux kernel's
> disagree.
>
> > I'll close this report unless you have other opinion.
> 
> Fine with me, it would be nice to have consistent behavior of the kernel
> and the different libcs in Debian though.

One idea is we could switch this behavior with __USE_UNIX98 compile
option.  Though I feel it's excess to introduce such modification.
Thinking about nice(2) vs getpriority(2), I think the current glibc
hehavior is natural than SUS definition.  Listening to the opinion
from upstream glibc team or kernel guys or austin group people would
be nice.

Regards,
-- gotom



Reply to: