summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Wouters <thomas@python.org>2001-07-11 14:01:08 (GMT)
committerThomas Wouters <thomas@python.org>2001-07-11 14:01:08 (GMT)
commit44589dda83bb90ad4a9e9f6fc714a71888153d01 (patch)
tree500c572f7989e1ef72592e133f156df3484745a4
parent958106de0494de001ff0148770b1997a9eb9ae2c (diff)
downloadcpython-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.c19
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure4
-rw-r--r--configure.in2
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
diff --git a/configure b/configure
index affbd22..4f7b8f5 100755
--- a/configure
+++ b/configure
@@ -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