* spinlock.h (__pthread_alt_trylock): Fix code used if no
	compare&swap is available.
This commit is contained in:
Ulrich Drepper 2000-07-19 06:24:30 +00:00
parent a48297fdf3
commit 056f707c86
2 changed files with 16 additions and 1 deletions

View File

@ -1,5 +1,8 @@
2000-07-18 Ulrich Drepper <drepper@redhat.com>
* spinlock.h (__pthread_alt_trylock): Fix code used if no
compare&swap is available.
* spinlock.h (__pthread_trylock): Use __compare_and_swap, not
compare_and_swap.

View File

@ -149,7 +149,19 @@ static inline int __pthread_alt_trylock (struct _pthread_fastlock * lock)
#endif
#if !defined HAS_COMPARE_AND_SWAP || defined TEST_FOR_COMPARE_AND_SWAP
{
return (testandset(&lock->__spinlock) ? EBUSY : 0);
int res = EBUSY;
if (testandset(&lock->__spinlock) == 0)
{
if (lock->__status == 0)
{
lock->__status = 1;
WRITE_MEMORY_BARRIER();
res = 0;
}
lock->__spinlock = 0;
}
return res;
}
#endif