mirror of https://github.com/python/cpython.git
Re-do the broken-nice() patch to break less platforms. Hopefully none :P
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.
This commit is contained in:
parent
3230d5c961
commit
e38b2f1f00
|
@ -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
|
||||
|
|
|
@ -116,6 +116,9 @@
|
|||
/* 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
|
||||
|
||||
|
|
|
@ -175,6 +175,9 @@
|
|||
/* 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
|
||||
|
||||
|
@ -641,6 +644,9 @@
|
|||
/* 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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
19
configure.in
19
configure.in
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue