From 414f4bd7e70d94025576d9264c86da63c506f6ca Mon Sep 17 00:00:00 2001 From: rpj Date: Wed, 13 Aug 2003 15:10:53 +0000 Subject: Bug fixes plus adaptation to current MinGW/MsysDTK environment. Changes to tests/benchmarks. --- pthread_spin_trylock.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'pthread_spin_trylock.c') diff --git a/pthread_spin_trylock.c b/pthread_spin_trylock.c index 39b7fd3..02cfd40 100644 --- a/pthread_spin_trylock.c +++ b/pthread_spin_trylock.c @@ -38,15 +38,17 @@ #include "implement.h" -/* - * NOTE: For speed, these routines don't check if "lock" is valid. - */ int pthread_spin_trylock(pthread_spinlock_t *lock) { - pthread_spinlock_t s = *lock; + register pthread_spinlock_t s; + + if (NULL == lock || NULL == *lock) + { + return(EINVAL); + } - if (s == PTHREAD_SPINLOCK_INITIALIZER) + if (*lock == PTHREAD_SPINLOCK_INITIALIZER) { int result; @@ -56,6 +58,8 @@ pthread_spin_trylock(pthread_spinlock_t *lock) } } + s = *lock; + switch ((long) ptw32_interlocked_compare_exchange((PTW32_INTERLOCKED_LPLONG) &(s->interlock), (PTW32_INTERLOCKED_LONG) PTW32_SPIN_LOCKED, (PTW32_INTERLOCKED_LONG) PTW32_SPIN_UNLOCKED )) -- cgit v1.2.3