|
|
|
@ -31,22 +31,23 @@ public: |
|
|
|
} |
|
|
|
|
|
|
|
if (IsLockedByCurrentThread()) { |
|
|
|
// If we already own the lock, we can just increment the count. |
|
|
|
// If we already own the lock, the lock count should be > 0. |
|
|
|
// For debug, ensure this is true. |
|
|
|
ASSERT(lock_count > 0); |
|
|
|
lock_count++; |
|
|
|
} else { |
|
|
|
// Otherwise, we want to disable scheduling and acquire the spinlock. |
|
|
|
SchedulerType::DisableScheduling(kernel); |
|
|
|
spin_lock.Lock(); |
|
|
|
|
|
|
|
// For debug, ensure that our state is valid. |
|
|
|
ASSERT(lock_count == 0); |
|
|
|
ASSERT(owner_thread == nullptr); |
|
|
|
|
|
|
|
// Increment count, take ownership. |
|
|
|
lock_count = 1; |
|
|
|
// Take ownership of the lock. |
|
|
|
owner_thread = GetCurrentThreadPointer(kernel); |
|
|
|
} |
|
|
|
|
|
|
|
// Increment the lock count. |
|
|
|
lock_count++; |
|
|
|
} |
|
|
|
|
|
|
|
void Unlock() { |
|
|
|
|