From 907d0d20e886dc3e4004102437412fa6bfe9d028 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Thu, 15 Jun 2017 06:47:42 +0000 Subject: [PATCH] [RTL] - Implement RtlIsCriticalSectionLocked and RtlIsCriticalSectionLockedByThread CORE-13436 #resolve svn path=/trunk/; revision=75043 --- reactos/dll/ntdll/def/ntdll.spec | 4 ++-- reactos/sdk/include/ndk/rtlfuncs.h | 14 ++++++++++++++ reactos/sdk/lib/rtl/critical.c | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/reactos/dll/ntdll/def/ntdll.spec b/reactos/dll/ntdll/def/ntdll.spec index 5c54b4c8e5a..04103df6f97 100644 --- a/reactos/dll/ntdll/def/ntdll.spec +++ b/reactos/dll/ntdll/def/ntdll.spec @@ -736,8 +736,8 @@ 732 stdcall RtlIpv6StringToAddressExW(wstr ptr ptr ptr) 733 stdcall RtlIpv6StringToAddressW(wstr ptr ptr) 734 stdcall RtlIsActivationContextActive(ptr) -# stdcall RtlIsCriticalSectionLocked -# stdcall RtlIsCriticalSectionLockedByThread +735 stdcall RtlIsCriticalSectionLocked(ptr) +736 stdcall RtlIsCriticalSectionLockedByThread(ptr) 737 stdcall RtlIsDosDeviceName_U(wstr) 738 stdcall RtlIsGenericTableEmpty(ptr) 739 stdcall RtlIsGenericTableEmptyAvl(ptr) diff --git a/reactos/sdk/include/ndk/rtlfuncs.h b/reactos/sdk/include/ndk/rtlfuncs.h index 30b61ed761f..68d474f31fd 100644 --- a/reactos/sdk/include/ndk/rtlfuncs.h +++ b/reactos/sdk/include/ndk/rtlfuncs.h @@ -3025,6 +3025,20 @@ RtlInitializeCriticalSectionAndSpinCount( _In_ ULONG SpinCount ); +NTSYSAPI +ULONG +NTAPI +RtlIsCriticalSectionLocked( + _In_ PRTL_CRITICAL_SECTION CriticalSection +); + +NTSYSAPI +ULONG +NTAPI +RtlIsCriticalSectionLockedByThread( + _In_ PRTL_CRITICAL_SECTION CriticalSection +); + NTSYSAPI NTSTATUS NTAPI diff --git a/reactos/sdk/lib/rtl/critical.c b/reactos/sdk/lib/rtl/critical.c index 3f5a9dcb7ef..ff0d1a9732c 100644 --- a/reactos/sdk/lib/rtl/critical.c +++ b/reactos/sdk/lib/rtl/critical.c @@ -786,4 +786,19 @@ RtlCheckForOrphanedCriticalSections(HANDLE ThreadHandle) UNIMPLEMENTED; } +ULONG +NTAPI +RtlIsCriticalSectionLocked(PRTL_CRITICAL_SECTION CriticalSection) +{ + return CriticalSection->RecursionCount != 0; +} + +ULONG +NTAPI +RtlIsCriticalSectionLockedByThread(PRTL_CRITICAL_SECTION CriticalSection) +{ + return CriticalSection->OwningThread == NtCurrentTeb()->ClientId.UniqueThread && + CriticalSection->RecursionCount != 0; +} + /* EOF */ -- 2.17.1