diff options
author | rpj <rpj> | 2003-08-13 15:10:53 +0000 |
---|---|---|
committer | rpj <rpj> | 2003-08-13 15:10:53 +0000 |
commit | 414f4bd7e70d94025576d9264c86da63c506f6ca (patch) | |
tree | ed0d8de3bd5fbccd0191b3e6cc1e0d86ebe8ff97 /pthread_spin_trylock.c | |
parent | 614c09bf607cf77c70c7435cd615c9f8b684bc5e (diff) |
Bug fixes plus adaptation to current MinGW/MsysDTK environment. Changes to tests/benchmarks.
Diffstat (limited to 'pthread_spin_trylock.c')
-rw-r--r-- | pthread_spin_trylock.c | 14 |
1 files changed, 9 insertions, 5 deletions
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 )) |