From fea868eebc13e6d88a87c7b2aafd6e0fedde1a44 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 29 Mar 2009 12:57:58 +0000 Subject: [PATCH] - Implement KeTestSpinLock. svn path=/trunk/; revision=40284 --- reactos/include/ddk/winddk.h | 7 +++++++ reactos/ntoskrnl/ke/spinlock.c | 16 +++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) 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 */