Favor using pthread_mutexattr_settype() on Linux.
authorSam Lantinga <slouken@libsdl.org>
Fri, 03 Feb 2006 06:33:54 +0000
changeset 1324 42e95163d553
parent 1323 be736c197ceb
child 1325 1dfc85090d07
Favor using pthread_mutexattr_settype() on Linux.
configure.in
src/thread/linux/SDL_sysmutex.c
--- 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);