From: Thomas Faber Date: Thu, 15 Jun 2017 06:47:42 +0000 (+0000) Subject: [RTL] X-Git-Tag: ReactOS-0.4.6~308 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=907d0d20e886dc3e4004102437412fa6bfe9d028 [RTL] - Implement RtlIsCriticalSectionLocked and RtlIsCriticalSectionLockedByThread CORE-13436 #resolve svn path=/trunk/; revision=75043 --- 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 */