From 64a1ea1aa97e5de174220f8de6815ede9fcfabac Mon Sep 17 00:00:00 2001 From: rpj Date: Mon, 8 Oct 2001 05:14:05 +0000 Subject: pthread_spin_trylock was not returning EBUSY on multi CPU machines. --- spin.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'spin.c') diff --git a/spin.c b/spin.c index 458bb7a..d2d795f 100644 --- a/spin.c +++ b/spin.c @@ -284,17 +284,13 @@ pthread_spin_trylock(pthread_spinlock_t *lock) } } - if ((_LONG) PTW32_SPIN_UNLOCKED == - InterlockedCompareExchange((_LPLONG) &(s->interlock), - (_LONG) PTW32_SPIN_LOCKED, - (_LONG) PTW32_SPIN_UNLOCKED ) ) - { - return 0; - } - - if (s->interlock == PTW32_SPIN_USE_MUTEX) + switch ((long) InterlockedCompareExchange((_LPLONG) &(s->interlock), + (_LONG) PTW32_SPIN_LOCKED, + (_LONG) PTW32_SPIN_UNLOCKED )) { - return pthread_mutex_trylock(&(s->u.mutex)); + case PTW32_SPIN_UNLOCKED: return 0; + case PTW32_SPIN_LOCKED: return EBUSY; + case PTW32_SPIN_USE_MUTEX: return pthread_mutex_trylock(&(s->u.mutex)); } return EINVAL; -- cgit v1.2.3