* spinlock.c (__pthread_unlock): Don"t crash if called for an
	untaken mutex.  Reported by Ruslan V. Brushkoff <rus@Snif.Te.Net.UA>.
This commit is contained in:
Ulrich Drepper 1998-12-14 16:33:50 +00:00
parent 60876a7544
commit fbaf6e72d6
2 changed files with 8 additions and 3 deletions

View File

@ -1,5 +1,8 @@
1998-12-14 Ulrich Drepper <drepper@cygnus.com>
* spinlock.c (__pthread_unlock): Don"t crash if called for an
untaken mutex. Reported by Ruslan V. Brushkoff <rus@Snif.Te.Net.UA>.
* Examples/ex6.c: Unbuffer stdout and reduce sleep time to reduce
overall runtime.

View File

@ -65,9 +65,11 @@ void internal_function __pthread_unlock(struct _pthread_fastlock * lock)
again:
oldstatus = lock->__status;
if (oldstatus == 1) {
/* No threads are waiting for this lock */
if (! compare_and_swap(&lock->__status, 1, 0, &lock->__spinlock))
if (oldstatus == 0 || oldstatus == 1) {
/* No threads are waiting for this lock. Please note that we also
enter this case if the lock is not taken at all. If this wouldn't
be done here we would crash further down. */
if (! compare_and_swap(&lock->__status, oldstatus, 0, &lock->__spinlock))
goto again;
return;
}