[Commits] SDL: SDL 1.3 patch 00 for GSoC: Haiku - Implemented pthread spin...
libsdl.org revision control
commits-owner at libsdl.org
Thu Sep 15 20:57:12 PDT 2011
details: http://hg.libsdl.org/SDL/rev/6b524fc4861a
changeset: 5914:6b524fc4861a
user: Nathan Heisey <nathanheisey at gmail.com>
date: Tue Jun 21 13:49:14 2011 +0000
description:
SDL 1.3 patch 00 for GSoC: Haiku - Implemented pthread spinlock in src/atomic/spinlock.c (in both trylock and
unlock). Added appropriate checks in configure.in and include/SDL_configure.h.in.
diffstat:
configure.in | 19 +++++++++++++++++++
include/SDL_config.h.in | 1 +
src/atomic/SDL_spinlock.c | 11 +++++++++--
3 files changed, 29 insertions(+), 2 deletions(-)
diffs (70 lines):
diff -r 45a709ef443d -r 6b524fc4861a configure.in
--- a/configure.in Wed Jun 15 10:28:01 2011 +0100
+++ b/configure.in Tue Jun 21 13:49:14 2011 +0000
@@ -280,6 +280,25 @@
fi
fi
+# Check for pthread implementation
+AC_MSG_CHECKING(for pthread spinlock)
+have_pthread_spinlock=no
+
+AC_TRY_LINK([
+#include <pthread.h>
+],[
+pthread_spinlock_t a;
+pthread_spin_trylock(&a);
+pthread_spin_unlock(&a);
+],[
+have_pthread_spinlock=yes
+])
+AC_MSG_RESULT($have_pthread_spinlock)
+if test x$have_pthread_spinlock = xyes; then
+ AC_DEFINE(HAVE_PTHREAD_SPINLOCK, 1, [ ])
+fi
+
+
# Standard C sources
SOURCES="$SOURCES $srcdir/src/*.c"
SOURCES="$SOURCES $srcdir/src/atomic/*.c"
diff -r 45a709ef443d -r 6b524fc4861a include/SDL_config.h.in
--- a/include/SDL_config.h.in Wed Jun 15 10:28:01 2011 +0100
+++ b/include/SDL_config.h.in Tue Jun 21 13:49:14 2011 +0000
@@ -45,6 +45,7 @@
#undef SIZEOF_VOIDP
#undef HAVE_GCC_ATOMICS
#undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET
+#undef HAVE_PTHREAD_SPINLOCK
/* Comment this if you want to build without any C library requirements */
#undef HAVE_LIBC
diff -r 45a709ef443d -r 6b524fc4861a src/atomic/SDL_spinlock.c
--- a/src/atomic/SDL_spinlock.c Wed Jun 15 10:28:01 2011 +0100
+++ b/src/atomic/SDL_spinlock.c Tue Jun 21 13:49:14 2011 +0000
@@ -77,9 +77,13 @@
: "=&r" (result) : "r" (1), "r" (lock) : "cc", "memory");
return (result == 0);
-#else
+#elif HAVE_PTHREAD_SPINLOCK
+ /* pthread instructions */
+ return (pthread_spin_trylock(lock) == 0);
+#else
/* Need CPU instructions for spinlock here! */
__need_spinlock_implementation__
+
#endif
}
@@ -101,7 +105,10 @@
#elif HAVE_GCC_ATOMICS || HAVE_GCC_SYNC_LOCK_TEST_AND_SET
__sync_lock_release(lock);
-
+
+#elif HAVE_PTHREAD_SPINLOCK
+ pthread_spin_unlock(lock);
+
#else
*lock = 0;
#endif
More information about the commits
mailing list