Don't use Posix semaphores on Solaris 8. Fixes #662787.
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h
index 8067121..e30982f 100644
--- a/Python/thread_pthread.h
+++ b/Python/thread_pthread.h
@@ -104,7 +104,7 @@
 /* Whether or not to use semaphores directly rather than emulating them with
  * mutexes and condition variables:
  */
-#ifdef _POSIX_SEMAPHORES
+#if defined(_POSIX_SEMAPHORES) && !defined(HAVE_BROKEN_POSIX_SEMAPHORES)
 #  define USE_SEMAPHORES
 #else
 #  undef USE_SEMAPHORES
diff --git a/configure b/configure
index df432d8..c94f2a1 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 1.385 .
+# From configure.in Revision: 1.386 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.53 for python 2.3.
 #
@@ -11132,6 +11132,15 @@
 
       fi
 
+      # Bug 662787: Using semaphores causes unexplicable hangs on Solaris 8.
+      case  $ac_sys_system/$ac_sys_release in
+      SunOS/5.8)
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BROKEN_POSIX_SEMAPHORES 1
+_ACEOF
+;;
+      esac
+
       echo "$as_me:$LINENO: checking if PTHREAD_SCOPE_SYSTEM is supported" >&5
 echo $ECHO_N "checking if PTHREAD_SCOPE_SYSTEM is supported... $ECHO_C" >&6
       if test "${ac_cv_pthread_system_supported+set}" = set; then
diff --git a/configure.in b/configure.in
index c8ba86b..8011c97 100644
--- a/configure.in
+++ b/configure.in
@@ -1447,6 +1447,12 @@
           and your system does not define that.])
       fi
 
+      # Bug 662787: Using semaphores causes unexplicable hangs on Solaris 8.
+      case  $ac_sys_system/$ac_sys_release in
+      SunOS/5.8) AC_DEFINE(HAVE_BROKEN_POSIX_SEMAPHORES, 1,
+                           Define if the Posix semaphores do not work on your system);;
+      esac
+
       AC_MSG_CHECKING(if PTHREAD_SCOPE_SYSTEM is supported)
       AC_CACHE_VAL(ac_cv_pthread_system_supported,
       [AC_TRY_RUN([#include <pthread.h>
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 3627b83..dea4722 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -44,6 +44,9 @@
 /* Define if nice() returns success/failure instead of the new priority. */
 #undef HAVE_BROKEN_NICE
 
+/* Define if the Posix semaphores do not work on your system */
+#undef HAVE_BROKEN_POSIX_SEMAPHORES
+
 /* Define to 1 if you have the `chown' function. */
 #undef HAVE_CHOWN