1
1
openmpi/opal/config/opal_check_pthread_pids.m4
Ralph Castain d5dfe05521 Remove stale code associated with OPAL_THREADS_HAVE_DIFFERENT_PIDS. In the past, we have supported the case of really, really old Linux kernels where threads have different pids. However, when we updated the event library, we didn't also update that support code. In addition, when we dropped progress thread support, we didn't remove areas of the code that could no longer be compiled (i.e., were protected by "if progress thread && if have different pids).
There was no compelling reason to support such old kernels. Accordingly, convert the test to print a nice error message indicating we no longer support old kernels (but indicate that earlier OMPI versions do) and error out. Remove all code that was protected by "if have different pids" since it can no longer be compiled.

This commit was SVN r24531.
2011-03-15 21:05:03 +00:00

121 lines
4.0 KiB
Plaintext

dnl
dnl Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
dnl University Research and Technology
dnl Corporation. All rights reserved.
dnl Copyright (c) 2004-2005 The University of Tennessee and The University
dnl of Tennessee Research Foundation. All rights
dnl reserved.
dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
dnl University of Stuttgart. All rights reserved.
dnl Copyright (c) 2004-2005 The Regents of the University of California.
dnl All rights reserved.
dnl Copyright (c) 2008-2011 Cisco Systems, Inc. All rights reserved.
dnl $COPYRIGHT$
dnl
dnl Additional copyrights may follow
dnl
dnl $HEADER$
dnl
AC_DEFUN([OMPI_CHECK_PTHREAD_PIDS],[
#
# Arguments: none
#
# Dependencies: None
#
# Sets:
# OPAL_THREADS_HAVE_DIFFERENT_PIDS (variable)
#
# Test for Linux-like threads in the system. OPAL no longer supports
# systems with different PIDs for threads in the same process, so error
# out if we detect that case.
#
AC_MSG_CHECKING([if threads have different pids (pthreads on linux)])
CFLAGS_save="$CFLAGS"
CFLAGS="$CFLAGS $THREAD_CFLAGS"
CPPFLAGS_save="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $THREAD_CPPFLAGS"
LDFLAGS_save="$LDFLAGS"
LDFLAGS="$LDFLAGS $THREAD_LDFLAGS"
LIBS_save="$LIBS"
LIBS="$LIBS $THREAD_LIBS"
AC_TRY_RUN([#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
void *checkpid(void *arg);
int main() {
pthread_t thr;
int pid, *retval;
pid = getpid();
pthread_create(&thr, NULL, checkpid, &pid);
pthread_join(thr, (void **) &retval);
exit(*retval);
}
static int ret;
void *checkpid(void *arg) {
int ppid = *((int *) arg);
if (ppid == getpid())
ret = 0;
else
ret = 1;
pthread_exit((void *) &ret);
}],
[MSG=no OPAL_THREADS_HAVE_DIFFERENT_PIDS=0],
[MSG=yes OPAL_THREADS_HAVE_DIFFERENT_PIDS=1],
[case $host in
*-linux*)
# We don't know exactly when (and I really don't feel like
# checking, because this is such a small case), but somewhere
# along the line, Linux stopped using different PIDs for
# threads. So rule that if we're <=2.6.9 (i.e., RHEL4), then
# the PIDs are different. If above that version, they're the
# same.
linux_ver=`uname -a | awk '{ print [$]3 }'`
linux_ver_major=`echo $linux_ver | cut -d. -f1`
linux_ver_minor=`echo $linux_ver | cut -d. -f2`
linux_ver_rel=`echo $linux_ver | cut -d. -f3 | cut -d- -f1`
OPAL_THREADS_HAVE_DIFFERENT_PIDS=1
MSG="cross compiling - assuming yes"
if test "$linux_ver_major" -gt 2; then
OPAL_THREADS_HAVE_DIFFERENT_PIDS=0
MSG="cross compiling and Linux version >= 2.x.x - assuming no"
elif test "$linux_ver_major" -eq 2 -a "$linux_ver_minor" -gt 6; then
MSG="cross compiling and Linux version >= 2.6.x - assuming no"
elif test "$linux_ver_major" -eq 2 -a "$linux_ver_minor" -eq 6 -a "$linux_ver_rel" -gt 9; then
MSG="cross compiling and Linux version >= 2.6.9 - assuming no"
fi
;;
*)
MSG="cross compiling - assuming no"
OPAL_THREADS_HAVE_DIFFERENT_PIDS=0
;;
esac
])
CFLAGS="$CFLAGS_save"
CPPFLAGS="$CPPFLAGS_save"
LDFLAGS="$LDFLAGS_save"
LIBS="$LIBS_save"
AC_MSG_RESULT([$MSG])
AS_IF([test "$OPAL_THREADS_HAVE_DIFFERENT_PIDS" = "1"],
[AC_MSG_WARN([This version of Open MPI only supports when threads have])
AC_MSG_WARN([the same PID. Please use an older version of Open MPI])
AC_MSG_WARN([if you need support on systems with different PIDs for])
AC_MSG_WARN([threads in the same process. Open MPI 1.4.x supports such])
AC_MSG_WARN([ systems, as does at least some versions the Open MPI])
AC_MSG_WARN([1.5.x series.])
AC_MSG_ERROR([Cannot continue])
])
#
# if pthreads is not available, then the system does not have an insane threads
# model
#
unset MSG])dnl