mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Patch #439995 (slightly modified from the uploaded version):
Work around Linux's nonstandard nice() systemcall, which does not return the new priority. This closes SF bug #439990.
This commit is contained in:
parent
109d986bfc
commit
c2c12dc31c
4 changed files with 317 additions and 286 deletions
|
@ -1121,8 +1121,25 @@ posix_nice(PyObject *self, PyObject *args)
|
|||
|
||||
if (!PyArg_ParseTuple(args, "i:nice", &increment))
|
||||
return NULL;
|
||||
|
||||
/* There are two flavours of 'nice': one that returns the new
|
||||
priority (as required by almost all standards out there) and the
|
||||
Linux one, which returns '0' on success and advices the use of
|
||||
getpriority() to get the new priority.
|
||||
|
||||
If we are of the nice family that returns the new priority, we
|
||||
need to clear errno before the call, and check if errno is filled
|
||||
before calling posix_error() on a returnvalue of -1, because the
|
||||
-1 may be the actual new priority! */
|
||||
|
||||
errno = 0;
|
||||
value = nice(increment);
|
||||
if (value == -1)
|
||||
#ifdef HAVE_GETPRIORITY
|
||||
if (value == 0)
|
||||
value = getpriority(PRIO_PROCESS, 0);
|
||||
#endif
|
||||
if (value == -1 && errno != 0)
|
||||
/* either nice() or getpriority() returned an error */
|
||||
return posix_error();
|
||||
return PyInt_FromLong((long) value);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue