diff options
Diffstat (limited to 'kern/spinlock.h')
-rw-r--r-- | kern/spinlock.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/kern/spinlock.h b/kern/spinlock.h index ba8b3a8a..ccd2cc60 100644 --- a/kern/spinlock.h +++ b/kern/spinlock.h @@ -83,7 +83,7 @@ spinlock_lock(struct spinlock *lock) { thread_preempt_disable(); - while (atomic_cas(&lock->locked, 0, 1)) + while (atomic_cas(&lock->locked, 0, 1) != 0) cpu_pause(); } @@ -93,7 +93,10 @@ spinlock_lock(struct spinlock *lock) static inline void spinlock_unlock(struct spinlock *lock) { - atomic_swap(&lock->locked, 0); + unsigned long locked; + + locked = atomic_swap(&lock->locked, 0); + assert(locked); thread_preempt_enable(); } |