* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ke/spinlock.c
* PURPOSE: Implements spinlocks
- * PROGRAMMER: David Welch (welch@cwcom.net)
- * UPDATE HISTORY:
- * 3/6/98: Created
+ *
+ * PROGRAMMERS: David Welch (welch@cwcom.net)
*/
/*
* FIXME: This depends on gcc assembling this test to a single load from
* the spinlock's value.
*/
- if (*SpinLock >= 2)
- {
- DbgPrint("Lock %x has bad value %x\n", SpinLock, *SpinLock);
- KEBUGCHECK(0);
- }
+ ASSERT(*SpinLock < 2);
while ((i = InterlockedExchangeUL(SpinLock, 1)) == 1)
{
:
: "r" (SpinLock));
#else
- while (0 != *(volatile PKSPIN_LOCK)SpinLock)
- {
- }
+ while (0 != *(volatile KSPIN_LOCK*)SpinLock);
#endif
#else
DbgPrint("Spinning on spinlock %x current value %x\n", SpinLock, i);
- KEBUGCHECK(0);
+ KEBUGCHECKEX(SPIN_LOCK_ALREADY_OWNED, (ULONG)SpinLock, 0, 0, 0);
#endif /* CONFIG_SMP */
}
}
if (*SpinLock != 1)
{
DbgPrint("Releasing unacquired spinlock %x\n", SpinLock);
- KEBUGCHECK(0);
+ KEBUGCHECKEX(SPIN_LOCK_NOT_OWNED, (ULONG)SpinLock, 0, 0, 0);
}
(void)InterlockedExchangeUL(SpinLock, 0);
}