From: Martin Willi Date: Thu, 13 Dec 2012 10:22:40 +0000 (+0100) Subject: Use a ./configure check to detect pthread spinlock availability X-Git-Tag: 5.0.2dr4~98 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4185c64464f2a198095d7d766de312e0ccd0449d;p=thirdparty%2Fstrongswan.git Use a ./configure check to detect pthread spinlock availability _POSIX_SPIN_LOCKS does not seem to be defined correctly on all systems (Debian libc 2.3.6). Fixes #262. --- diff --git a/configure.in b/configure.in index 97a7ad3795..44f2031fca 100644 --- a/configure.in +++ b/configure.in @@ -414,6 +414,8 @@ dnl check if we can cancel threads AC_CHECK_FUNCS(pthread_cancel) dnl check if native rwlocks are available AC_CHECK_FUNCS(pthread_rwlock_init) +dnl check if pthread spinlocks are available +AC_CHECK_FUNCS(pthread_spin_init) dnl check if we have POSIX semaphore functions, including timed-wait AC_CHECK_FUNCS(sem_timedwait) LIBS=$saved_LIBS diff --git a/src/libstrongswan/threading/spinlock.c b/src/libstrongswan/threading/spinlock.c index f0602f0b09..a0de02ce5e 100644 --- a/src/libstrongswan/threading/spinlock.c +++ b/src/libstrongswan/threading/spinlock.c @@ -13,7 +13,6 @@ * for more details. */ -#include /* for _POSIX_SPIN_LOCKS */ #include #include @@ -23,10 +22,6 @@ #include "mutex.h" #include "lock_profiler.h" -#if defined(_POSIX_SPIN_LOCKS) && _POSIX_SPIN_LOCKS == -1 -#undef _POSIX_SPIN_LOCKS -#endif - typedef struct private_spinlock_t private_spinlock_t; /** @@ -39,7 +34,7 @@ struct private_spinlock_t { */ spinlock_t public; -#ifdef _POSIX_SPIN_LOCKS +#ifdef HAVE_PTHREAD_SPIN_INIT /** * wrapped pthread spin lock @@ -51,20 +46,20 @@ struct private_spinlock_t { */ lock_profile_t profile; -#else /* _POSIX_SPIN_LOCKS */ +#else /* HAVE_PTHREAD_SPIN_INIT */ /** * use a mutex if spin locks are not available */ mutex_t *mutex; -#endif /* _POSIX_SPIN_LOCKS */ +#endif /* HAVE_PTHREAD_SPIN_INIT */ }; METHOD(spinlock_t, lock, void, private_spinlock_t *this) { -#ifdef _POSIX_SPIN_LOCKS +#ifdef HAVE_PTHREAD_SPIN_INIT int err; profiler_start(&this->profile); @@ -82,7 +77,7 @@ METHOD(spinlock_t, lock, void, METHOD(spinlock_t, unlock, void, private_spinlock_t *this) { -#ifdef _POSIX_SPIN_LOCKS +#ifdef HAVE_PTHREAD_SPIN_INIT int err; err = pthread_spin_unlock(&this->spinlock); @@ -98,7 +93,7 @@ METHOD(spinlock_t, unlock, void, METHOD(spinlock_t, destroy, void, private_spinlock_t *this) { -#ifdef _POSIX_SPIN_LOCKS +#ifdef HAVE_PTHREAD_SPIN_INIT profiler_cleanup(&this->profile); pthread_spin_destroy(&this->spinlock); #else @@ -122,15 +117,12 @@ spinlock_t *spinlock_create() }, ); -#ifdef _POSIX_SPIN_LOCKS +#ifdef HAVE_PTHREAD_SPIN_INIT pthread_spin_init(&this->spinlock, PTHREAD_PROCESS_PRIVATE); profiler_init(&this->profile); #else - #warning Using mutexes as spin lock alternatives this->mutex = mutex_create(MUTEX_TYPE_DEFAULT); #endif return &this->public; } - -