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
|
#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__[] =
|
static char posix_nice__doc__[] =
|
||||||
"nice(inc) -> new_priority\n\
|
"nice(inc) -> new_priority\n\
|
||||||
Decrease the priority of process and return new priority.";
|
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
|
/* There are two flavours of 'nice': one that returns the new
|
||||||
priority (as required by almost all standards out there) and the
|
priority (as required by almost all standards out there) and the
|
||||||
Linux one, which returns '0' on success and advices the use of
|
Linux/FreeBSD/BSDI one, which returns '0' on success and advices
|
||||||
getpriority() to get the new priority.
|
the use of getpriority() to get the new priority.
|
||||||
|
|
||||||
If we are of the nice family that returns the new priority, we
|
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
|
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;
|
errno = 0;
|
||||||
value = nice(increment);
|
value = nice(increment);
|
||||||
#ifdef HAVE_GETPRIORITY
|
#if defined(HAVE_BROKEN_NICE) && defined(HAVE_GETPRIORITY)
|
||||||
if (value == 0)
|
if (value == 0)
|
||||||
value = getpriority(PRIO_PROCESS, 0);
|
value = getpriority(PRIO_PROCESS, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -116,6 +116,9 @@
|
||||||
/* Define as the size of the unicode type. */
|
/* Define as the size of the unicode type. */
|
||||||
#undef Py_UNICODE_SIZE
|
#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 */
|
/* Define if malloc(0) returns a NULL pointer */
|
||||||
#undef MALLOC_ZERO_RETURNS_NULL
|
#undef MALLOC_ZERO_RETURNS_NULL
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,9 @@
|
||||||
/* Define as the size of the unicode type. */
|
/* Define as the size of the unicode type. */
|
||||||
#undef Py_UNICODE_SIZE
|
#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 */
|
/* Define if malloc(0) returns a NULL pointer */
|
||||||
#undef MALLOC_ZERO_RETURNS_NULL
|
#undef MALLOC_ZERO_RETURNS_NULL
|
||||||
|
|
||||||
|
@ -641,6 +644,9 @@
|
||||||
/* Define if you have the <sys/param.h> header file. */
|
/* Define if you have the <sys/param.h> header file. */
|
||||||
#undef HAVE_SYS_PARAM_H
|
#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. */
|
/* Define if you have the <sys/select.h> header file. */
|
||||||
#undef HAVE_SYS_SELECT_H
|
#undef HAVE_SYS_SELECT_H
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
# From configure.in Revision: 1.225
|
# From configure.in Revision: 1.226
|
||||||
|
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated automatically using autoconf version 2.13
|
# 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/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/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 \
|
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
|
do
|
||||||
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
|
||||||
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
|
||||||
|
@ -6876,6 +6876,51 @@ else
|
||||||
fi
|
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!
|
# THIS MUST BE LAST, IT CAN BREAK OTHER TESTS!
|
||||||
# Add sys/socket.h to confdefs.h
|
# Add sys/socket.h to confdefs.h
|
||||||
cat >> confdefs.h <<\EOF
|
cat >> confdefs.h <<\EOF
|
||||||
|
@ -6884,12 +6929,12 @@ cat >> confdefs.h <<\EOF
|
||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
echo $ac_n "checking for socklen_t""... $ac_c" 1>&6
|
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
|
if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then
|
||||||
echo $ac_n "(cached) $ac_c" 1>&6
|
echo $ac_n "(cached) $ac_c" 1>&6
|
||||||
else
|
else
|
||||||
cat > conftest.$ac_ext <<EOF
|
cat > conftest.$ac_ext <<EOF
|
||||||
#line 6893 "configure"
|
#line 6938 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#if STDC_HEADERS
|
#if STDC_HEADERS
|
||||||
|
@ -6938,7 +6983,7 @@ done
|
||||||
|
|
||||||
SRCDIRS="Parser Grammar Objects Python Modules"
|
SRCDIRS="Parser Grammar Objects Python Modules"
|
||||||
echo $ac_n "checking for build directories""... $ac_c" 1>&6
|
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
|
for dir in $SRCDIRS; do
|
||||||
if test ! -d $dir; then
|
if test ! -d $dir; then
|
||||||
mkdir $dir
|
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/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/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 \
|
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
|
AC_HEADER_DIRENT
|
||||||
|
|
||||||
# checks for typedefs
|
# checks for typedefs
|
||||||
|
@ -1671,6 +1671,23 @@ fi
|
||||||
AC_CHECK_LIB(readline, rl_completion_matches,
|
AC_CHECK_LIB(readline, rl_completion_matches,
|
||||||
AC_DEFINE(HAVE_RL_COMPLETION_MATCHES), , -ltermcap)
|
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!
|
# THIS MUST BE LAST, IT CAN BREAK OTHER TESTS!
|
||||||
# Add sys/socket.h to confdefs.h
|
# Add sys/socket.h to confdefs.h
|
||||||
cat >> confdefs.h <<\EOF
|
cat >> confdefs.h <<\EOF
|
||||||
|
|
Loading…
Reference in New Issue