Mercurial > sdl-ios-xcode
changeset 1324:42e95163d553
Favor using pthread_mutexattr_settype() on Linux.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Fri, 03 Feb 2006 06:33:54 +0000 |
parents | be736c197ceb |
children | 1dfc85090d07 |
files | configure.in src/thread/linux/SDL_sysmutex.c |
diffstat | 2 files changed, 32 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- 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.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
--- 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);