diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index 64e09ab0198..3d563cb65eb 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -5791,6 +5791,13 @@ KeTryToAcquireSpinLockAtDpcLevel( IN OUT PKSPIN_LOCK SpinLock ); +NTKERNELAPI +BOOLEAN +FASTCALL +KeTestSpinLock( + IN PKSPIN_LOCK SpinLock +); + #if defined (_X86_) NTKERNELAPI diff --git a/reactos/ntoskrnl/ke/spinlock.c b/reactos/ntoskrnl/ke/spinlock.c index fe4c43e68cb..b1b26fad969 100644 --- a/reactos/ntoskrnl/ke/spinlock.c +++ b/reactos/ntoskrnl/ke/spinlock.c @@ -305,14 +305,24 @@ KeReleaseInStackQueuedSpinLockForDpc(IN PKLOCK_QUEUE_HANDLE LockHandle) } /* - * @unimplemented + * @implemented */ BOOLEAN FASTCALL KeTestSpinLock(IN PKSPIN_LOCK SpinLock) { - UNIMPLEMENTED; - return FALSE; + /* Test this spinlock */ + if (*SpinLock) + { + /* Spinlock is busy, yield execution */ + YieldProcessor(); + + /* Return busy flag */ + return FALSE; + } + + /* Spinlock appears to be free */ + return TRUE; } /* EOF */