summaryrefslogtreecommitdiff
path: root/spin.c
diff options
context:
space:
mode:
Diffstat (limited to 'spin.c')
-rw-r--r--spin.c16
1 files changed, 6 insertions, 10 deletions
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;