]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Re-do the broken-nice() patch to break less platforms. Hopefully none :P
authorThomas Wouters <thomas@python.org>
Wed, 11 Jul 2001 22:35:31 +0000 (22:35 +0000)
committerThomas Wouters <thomas@python.org>
Wed, 11 Jul 2001 22:35:31 +0000 (22:35 +0000)
Also note that it isn't just Linux nice() that is broken: at least FreeBSD
and BSDI also have this problem. os.nice() should probably just be emulated
using getpriority()/setpriority(), if they are available, but I'll get to
that later.

Modules/posixmodule.c
acconfig.h
config.h.in
configure
configure.in

index 120c848bfb5f975b280da90b1f9e9f86d4fd5c65..aec8caaf20bef7ee4d7df7a877306d8c4deff39d 100644 (file)
@@ -1110,6 +1110,12 @@ posix_mkdir(PyObject *self, PyObject *args)
 
 
 #ifdef HAVE_NICE
+#if defined(HAVE_BROKEN_NICE) && defined(HAVE_SYS_RESOURCE_H)
+#if defined(HAVE_GETPRIORITY) && !defined(PRIO_PROCESS)
+#include <sys/resource.h>
+#endif
+#endif
+
 static char posix_nice__doc__[] =
 "nice(inc) -> new_priority\n\
 Decrease the priority of process and return new priority.";
@@ -1124,8 +1130,8 @@ posix_nice(PyObject *self, PyObject *args)
 
        /* 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.
+          Linux/FreeBSD/BSDI 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
@@ -1134,7 +1140,7 @@ posix_nice(PyObject *self, PyObject *args)
 
        errno = 0;
        value = nice(increment);
-#ifdef HAVE_GETPRIORITY
+#if defined(HAVE_BROKEN_NICE) && defined(HAVE_GETPRIORITY)
        if (value == 0)
                value = getpriority(PRIO_PROCESS, 0);
 #endif
index bee71f80f7bf10c139e03fba1d7a943335f45d85..165a9bc5250d6e69f1be198d8ca7b24dbfe4cf30 100644 (file)
 /* Define as the size of the unicode type. */
 #undef Py_UNICODE_SIZE
 
+/* Define if nice() returns success/failure instead of the new priority. */
+#undef HAVE_BROKEN_NICE
+
 /* Define if malloc(0) returns a NULL pointer */
 #undef MALLOC_ZERO_RETURNS_NULL
 
index a3b7e9e31cda9d02749905f2c07681668423e882..2de2016e5668a65b90a7c08007c0c2986d27f1e5 100644 (file)
 /* Define as the size of the unicode type. */
 #undef Py_UNICODE_SIZE
 
+/* Define if nice() returns success/failure instead of the new priority. */
+#undef HAVE_BROKEN_NICE
+
 /* Define if malloc(0) returns a NULL pointer */
 #undef MALLOC_ZERO_RETURNS_NULL
 
 /* Define if you have the <sys/param.h> header file.  */
 #undef HAVE_SYS_PARAM_H
 
+/* Define if you have the <sys/resource.h> header file.  */
+#undef HAVE_SYS_RESOURCE_H
+
 /* Define if you have the <sys/select.h> header file.  */
 #undef HAVE_SYS_SELECT_H
 
index 77a64e2a34e79ddd4d9b2455b441ab50f97b2995..67d6a97bcec23f1139762568048fe85abbbb150c 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# From configure.in Revision: 1.225 
+# From configure.in Revision: 1.226 
 
 # Guess values for system-dependent variables and create Makefiles.
 # Generated automatically using autoconf version 2.13 
@@ -2074,7 +2074,7 @@ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h termios.h \
 sys/audioio.h sys/file.h sys/lock.h sys/modem.h db_185.h db.h \
 sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \
 sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \
-ndbm.h db1/ndbm.h gdbm/ndbm.h
+ndbm.h db1/ndbm.h gdbm/ndbm.h sys/resource.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
@@ -6876,6 +6876,51 @@ else
 fi
 
 
+echo $ac_n "checking for broken nice()""... $ac_c" 1>&6
+echo "configure:6881: checking for broken nice()" >&5
+if eval "test \"`echo '$''{'ac_cv_broken_nice'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+if test "$cross_compiling" = yes; then
+    { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6890 "configure"
+#include "confdefs.h"
+
+int main()
+{
+       int val1 = nice(1);
+       if (val1 != -1 && val1 == nice(2))
+               exit(0);
+       exit(1);
+}
+
+EOF
+if { (eval echo configure:6902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_broken_nice=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_broken_nice=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_broken_nice" 1>&6
+if test "$ac_cv_broken_nice" = yes
+then
+  cat >> confdefs.h <<\EOF
+#define HAVE_BROKEN_NICE 1
+EOF
+
+fi
+
 # THIS MUST BE LAST, IT CAN BREAK OTHER TESTS!
 # Add sys/socket.h to confdefs.h
 cat >> confdefs.h <<\EOF
@@ -6884,12 +6929,12 @@ cat >> confdefs.h <<\EOF
 #endif
 EOF
 echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
-echo "configure:6888: checking for socklen_t" >&5
+echo "configure:6933: checking for socklen_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6893 "configure"
+#line 6938 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -6938,7 +6983,7 @@ done
 
 SRCDIRS="Parser Grammar Objects Python Modules"
 echo $ac_n "checking for build directories""... $ac_c" 1>&6
-echo "configure:6942: checking for build directories" >&5
+echo "configure:6987: checking for build directories" >&5
 for dir in $SRCDIRS; do
     if test ! -d $dir; then
         mkdir $dir
index 6359a46c3e83c4140e8b4a880ebb645db15fa2e8..8977512e7774d1517947f12e44048c5ed60fc28a 100644 (file)
@@ -545,7 +545,7 @@ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h termios.h \
 sys/audioio.h sys/file.h sys/lock.h sys/modem.h db_185.h db.h \
 sys/param.h sys/select.h sys/socket.h sys/time.h sys/times.h \
 sys/un.h sys/utsname.h sys/wait.h pty.h libutil.h \
-ndbm.h db1/ndbm.h gdbm/ndbm.h)
+ndbm.h db1/ndbm.h gdbm/ndbm.h sys/resource.h)
 AC_HEADER_DIRENT
 
 # checks for typedefs
@@ -1671,6 +1671,23 @@ fi
 AC_CHECK_LIB(readline, rl_completion_matches,
        AC_DEFINE(HAVE_RL_COMPLETION_MATCHES), , -ltermcap)
 
+AC_MSG_CHECKING(for broken nice())
+AC_CACHE_VAL(ac_cv_broken_nice, [
+AC_TRY_RUN([
+int main()
+{
+       int val1 = nice(1);
+       if (val1 != -1 && val1 == nice(2))
+               exit(0);
+       exit(1);
+}
+],ac_cv_broken_nice=yes, ac_cv_broken_nice=no)])
+AC_MSG_RESULT($ac_cv_broken_nice)
+if test "$ac_cv_broken_nice" = yes
+then
+  AC_DEFINE(HAVE_BROKEN_NICE)
+fi
+
 # THIS MUST BE LAST, IT CAN BREAK OTHER TESTS!
 # Add sys/socket.h to confdefs.h
 cat >> confdefs.h <<\EOF