/* FUNCTIONS *****************************************************************/
+/*
+ * @implemented
+ */
VOID STDCALL
RtlDeleteCriticalSection(PCRITICAL_SECTION CriticalSection)
{
CriticalSection->Reserved = -1;
}
+/*
+ * @implemented
+ */
VOID STDCALL
RtlEnterCriticalSection(PCRITICAL_SECTION CriticalSection)
{
HANDLE Thread = (HANDLE)NtCurrentTeb()->Cid.UniqueThread;
- ULONG ret;
if (InterlockedIncrement(&CriticalSection->LockCount))
{
#endif
}
+/*
+ * @implemented
+ */
NTSTATUS STDCALL
RtlInitializeCriticalSection(PCRITICAL_SECTION CriticalSection)
{
return Status;
}
+/*
+ * @implemented
+ */
VOID STDCALL
RtlLeaveCriticalSection(PCRITICAL_SECTION CriticalSection)
{
return;
}
CriticalSection->OwningThread = 0;
- if (InterlockedIncrement(&CriticalSection->LockCount) >= 0)
+ if (InterlockedDecrement(&CriticalSection->LockCount) >= 0)
{
NTSTATUS Status;
#endif
}
+/*
+ * @implemented
+ */
BOOLEAN STDCALL
RtlTryEnterCriticalSection(PCRITICAL_SECTION CriticalSection)
{
if (InterlockedCompareExchange((PVOID*)&CriticalSection->LockCount,
- (PVOID)1, (PVOID)0 ) == 0)
+ (PVOID)0, (PVOID)-1 ) == (PVOID)-1)
{
CriticalSection->OwningThread =
(HANDLE) NtCurrentTeb()->Cid.UniqueThread;
- CriticalSection->RecursionCount++;
+ CriticalSection->RecursionCount = 1;
return TRUE;
}
if (CriticalSection->OwningThread ==
(HANDLE)NtCurrentTeb()->Cid.UniqueThread)
{
+ InterlockedIncrement(&CriticalSection->LockCount);
CriticalSection->RecursionCount++;
return TRUE;
}
return FALSE;
}
-
/* EOF */
-
-
-
-
-