# HG changeset patch # User Sam Lantinga # Date 1138948434 0 # Node ID 42e95163d553eab0071753c70c54bf6cbe4b4593 # Parent be736c197ceb4539001530a70095592186b53498 Favor using pthread_mutexattr_settype() on Linux. diff -r be736c197ceb -r 42e95163d553 configure.in --- a/configure.in Fri Feb 03 06:01:23 2006 +0000 +++ b/configure.in Fri Feb 03 06:33:54 2006 +0000 @@ -1201,6 +1201,10 @@ [ --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 @@ # Check to see if recursive mutexes are available AC_MSG_CHECKING(for recursive mutexes) has_recursive_mutexes=no - AC_TRY_LINK([ - #include - ],[ - 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_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_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 diff -r be736c197ceb -r 42e95163d553 src/thread/linux/SDL_sysmutex.c --- a/src/thread/linux/SDL_sysmutex.c Fri Feb 03 06:01:23 2006 +0000 +++ b/src/thread/linux/SDL_sysmutex.c Fri Feb 03 06:33:54 2006 +0000 @@ -62,15 +62,13 @@ 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);