1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-24 17:51:17 +03:00
* 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

@@ -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