Patch 775605: Cygwin pthread_sigmask() workaround patch

Cygwin's pthread_sigmask() implementation appears to be buggy. This
patch works around this problem by using sigprocmask() instead.

This patch is implemented in a general way so it could be used by other
platforms too. If this approach is deemed too risky, then I can work up
a patch that just hacks Python/thread_pthread.h for Cygwin.

Note that I tested this patch against 2.3c1 under Red Hat Linux 8.0 too.

[snip]
And finally, I need someone to regenerate pyconfig.h.in and configure
with the same versions of the autotools that are normally used by
Python.

Neal kindly regenerated pyconfig.h.in and configure for me.
This commit is contained in:
Jason Tishler 2003-07-22 15:20:49 +00:00
parent 5d6ceb4aae
commit fac083d14a
4 changed files with 25 additions and 8 deletions

View File

@ -116,7 +116,7 @@
* other UNIX International compliant systems that don't have the full * other UNIX International compliant systems that don't have the full
* pthread implementation. * pthread implementation.
*/ */
#ifdef HAVE_PTHREAD_SIGMASK #if defined(HAVE_PTHREAD_SIGMASK) && !defined(HAVE_BROKEN_PTHREAD_SIGMASK)
# define SET_THREAD_SIGMASK pthread_sigmask # define SET_THREAD_SIGMASK pthread_sigmask
#else #else
# define SET_THREAD_SIGMASK sigprocmask # define SET_THREAD_SIGMASK sigprocmask

14
configure vendored
View File

@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.in Revision: 1.424 . # From configure.in Revision: 1.425 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.53 for python 2.3. # Generated by GNU Autoconf 2.53 for python 2.3.
# #
@ -908,7 +908,7 @@ esac
# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
# absolute. # absolute.
ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
@ -11785,7 +11785,15 @@ if test `eval echo '${'$as_ac_var'}'` = yes; then
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
_ACEOF _ACEOF
case $ac_sys_system in
CYGWIN*)
cat >>confdefs.h <<\_ACEOF
#define HAVE_BROKEN_PTHREAD_SIGMASK 1
_ACEOF
;;
esac
fi fi
done done
@ -18502,7 +18510,7 @@ esac
# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
# absolute. # absolute.
ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`

View File

@ -1701,7 +1701,13 @@ if test "$posix_threads" = "yes"; then
if test "$ac_cv_pthread_system_supported" = "yes"; then if test "$ac_cv_pthread_system_supported" = "yes"; then
AC_DEFINE(PTHREAD_SYSTEM_SCHED_SUPPORTED, 1, [Defined if PTHREAD_SCOPE_SYSTEM supported.]) AC_DEFINE(PTHREAD_SYSTEM_SCHED_SUPPORTED, 1, [Defined if PTHREAD_SCOPE_SYSTEM supported.])
fi fi
AC_CHECK_FUNCS(pthread_sigmask) AC_CHECK_FUNCS(pthread_sigmask,
[case $ac_sys_system in
CYGWIN*)
AC_DEFINE(HAVE_BROKEN_PTHREAD_SIGMASK, 1,
[Define if pthread_sigmask() does not work on your system.])
;;
esac])
fi fi

View File

@ -47,6 +47,9 @@
/* Define if the Posix semaphores do not work on your system */ /* Define if the Posix semaphores do not work on your system */
#undef HAVE_BROKEN_POSIX_SEMAPHORES #undef HAVE_BROKEN_POSIX_SEMAPHORES
/* Define if pthread_sigmask() does not work on your system. */
#undef HAVE_BROKEN_PTHREAD_SIGMASK
/* Define to 1 if you have the `chown' function. */ /* Define to 1 if you have the `chown' function. */
#undef HAVE_CHOWN #undef HAVE_CHOWN
@ -829,9 +832,6 @@
/* Define on NetBSD to activate all library features */ /* Define on NetBSD to activate all library features */
#undef _NETBSD_SOURCE #undef _NETBSD_SOURCE
/* Define on FreeBSD to activate all library features */
#undef __BSD_VISIBLE
/* Define _OSF_SOURCE to get the makedev macro. */ /* Define _OSF_SOURCE to get the makedev macro. */
#undef _OSF_SOURCE #undef _OSF_SOURCE
@ -857,6 +857,9 @@
/* Define to activate Unix95-and-earlier features */ /* Define to activate Unix95-and-earlier features */
#undef _XOPEN_SOURCE_EXTENDED #undef _XOPEN_SOURCE_EXTENDED
/* Define on FreeBSD to activate all library features */
#undef __BSD_VISIBLE
/* Define to 1 if type `char' is unsigned and you are not using gcc. */ /* Define to 1 if type `char' is unsigned and you are not using gcc. */
#ifndef __CHAR_UNSIGNED__ #ifndef __CHAR_UNSIGNED__
# undef __CHAR_UNSIGNED__ # undef __CHAR_UNSIGNED__