Skip to content
Permalink
Browse files

Favor using pthread_mutexattr_settype() on Linux.

  • Loading branch information
slouken committed Feb 3, 2006
1 parent 1a82987 commit cc29db1187b6b9737d6c7b84c26f8be292b5d3b9
Showing with 32 additions and 29 deletions.
  1. +27 −22 configure.in
  2. +5 −7 src/thread/linux/SDL_sysmutex.c
@@ -1201,6 +1201,10 @@ CheckPTHREAD()
[ --enable-pthread-sem use pthread semaphores [default=yes]],
, enable_pthread_sem=yes)
case "$target" in
*-*-linux*)
pthread_cflags="-D_REENTRANT -D_GNU_SOURCE"
pthread_lib="-lpthread"
;;
*-*-bsdi*)
pthread_cflags="-D_REENTRANT -D_THREAD_SAFE"
pthread_lib=""
@@ -1288,29 +1292,30 @@ CheckPTHREAD()
# Check to see if recursive mutexes are available
AC_MSG_CHECKING(for recursive mutexes)
has_recursive_mutexes=no
AC_TRY_LINK([
#include <pthread.h>
],[
pthread_mutexattr_t attr;
#if defined(linux) && !(defined(__arm__) && defined(QWS))
pthread_mutexattr_setkind_np(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
#else
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
#endif
],[
has_recursive_mutexes=yes
])
# Some systems have broken recursive mutex implementations
case "$target" in
*-*-darwin*)
has_recursive_mutexes=no
;;
*-*-solaris*)
has_recursive_mutexes=no
;;
esac
if test x$has_recursive_mutexes = xno; then
AC_TRY_COMPILE([
#include <pthread.h>
],[
pthread_mutexattr_t attr;
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
],[
has_recursive_mutexes=yes
CFLAGS="$CFLAGS -DPTHREAD_RECURSIVE_MUTEX"
])
fi
if test x$has_recursive_mutexes = xno; then
AC_TRY_COMPILE([
#include <pthread.h>
],[
pthread_mutexattr_t attr;
pthread_mutexattr_setkind_np(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
],[
has_recursive_mutexes=yes
CFLAGS="$CFLAGS -DPTHREAD_RECURSIVE_MUTEX_NP"
])
fi
AC_MSG_RESULT($has_recursive_mutexes)
if test x$has_recursive_mutexes != xyes; then
if test x$has_recursive_mutexes = xno; then
CFLAGS="$CFLAGS -DPTHREAD_NO_RECURSIVE_MUTEX"
fi

@@ -62,15 +62,13 @@ SDL_mutex *SDL_CreateMutex (void)
mutex = (SDL_mutex *)calloc(1, sizeof(*mutex));
if ( mutex ) {
pthread_mutexattr_init(&attr);
#ifdef PTHREAD_NO_RECURSIVE_MUTEX
/* No extra attributes necessary */
#else
#ifdef linux
#if defined(PTHREAD_RECURSIVE_MUTEX)
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
#elif defined(PTHREAD_RECURSIVE_MUTEX_NP)
pthread_mutexattr_setkind_np(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
#else
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
#endif
#endif /* PTHREAD_NO_RECURSIVE_MUTEX */
/* No extra attributes necessary */
#endif /* PTHREAD_RECURSIVE_MUTEX */
if ( pthread_mutex_init(&mutex->id, &attr) != 0 ) {
SDL_SetError("pthread_mutex_init() failed");
free(mutex);

0 comments on commit cc29db1

Please sign in to comment.