diff options
author | Thomas Wouters <thomas@python.org> | 2001-07-11 14:01:08 (GMT) |
---|---|---|
committer | Thomas Wouters <thomas@python.org> | 2001-07-11 14:01:08 (GMT) |
commit | 44589dda83bb90ad4a9e9f6fc714a71888153d01 (patch) | |
tree | 500c572f7989e1ef72592e133f156df3484745a4 | |
parent | 958106de0494de001ff0148770b1997a9eb9ae2c (diff) | |
download | cpython-44589dda83bb90ad4a9e9f6fc714a71888153d01.zip cpython-44589dda83bb90ad4a9e9f6fc714a71888153d01.tar.gz cpython-44589dda83bb90ad4a9e9f6fc714a71888153d01.tar.bz2 |
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.
-rw-r--r-- | Modules/posixmodule.c | 19 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 4 | ||||
-rw-r--r-- | configure.in | 2 |
4 files changed, 24 insertions, 4 deletions
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 646385e..1fbf1b8 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1078,8 +1078,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); } diff --git a/config.h.in b/config.h.in index a3c9e3f..67ee996 100644 --- a/config.h.in +++ b/config.h.in @@ -362,6 +362,9 @@ /* Define if you have the getpid function. */ #undef HAVE_GETPID +/* Define if you have the getpriority function. */ +#undef HAVE_GETPRIORITY + /* Define if you have the getpwent function. */ #undef HAVE_GETPWENT @@ -1,6 +1,6 @@ #! /bin/sh -# From configure.in Revision: 1.215.2.1 +# From configure.in Revision: 1.215.2.2 # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 @@ -4247,7 +4247,7 @@ for ac_func in alarm chown clock confstr ctermid ctermid_r execv \ setlocale setregid setreuid setsid setpgid setuid setvbuf \ sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ - truncate uname waitpid _getpty + truncate uname waitpid _getpty getpriority do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:4254: checking for $ac_func" >&5 diff --git a/configure.in b/configure.in index 48c4f0e..4867868 100644 --- a/configure.in +++ b/configure.in @@ -1008,7 +1008,7 @@ AC_CHECK_FUNCS(alarm chown clock confstr ctermid ctermid_r execv \ setlocale setregid setreuid setsid setpgid setuid setvbuf \ sigaction siginterrupt sigrelse strftime strptime symlink sysconf \ tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \ - truncate uname waitpid _getpty) + truncate uname waitpid _getpty getpriority) # check for openpty and forkpty |