Fix silly bugs in Critical section code. Thanks to Gunnar for finding one of them, thanks to mifritscher for finding the actual regression, and thanks to Filip for being understanding :P Modified: trunk/reactos/include/ntdll/rtl.h Modified: trunk/reactos/lib/ntdll/rtl/critical.c _____
Modified: trunk/reactos/include/ntdll/rtl.h --- trunk/reactos/include/ntdll/rtl.h 2005-01-03 23:35:02 UTC (rev 12771) +++ trunk/reactos/include/ntdll/rtl.h 2005-01-04 00:10:50 UTC (rev 12772) @@ -99,7 +99,6 @@
LIST_ENTRY ProcessLocksList; ULONG EntryCount; ULONG ContentionCount; - PVOID OwnerBackTrace[2]; PVOID Spare[2]; } CRITICAL_SECTION_DEBUG, *PCRITICAL_SECTION_DEBUG;
_____
Modified: trunk/reactos/lib/ntdll/rtl/critical.c --- trunk/reactos/lib/ntdll/rtl/critical.c 2005-01-03 23:35:02 UTC (rev 12771) +++ trunk/reactos/lib/ntdll/rtl/critical.c 2005-01-04 00:10:50 UTC (rev 12772) @@ -16,7 +16,7 @@
#include <ntdll/rtl.h> #include <ntos/synch.h>
-#define NDEBUG +//#define NDEBUG #include <ntdll/ntdll.h>
/* FUNCTIONS *****************************************************************/ @@ -146,6 +146,7 @@ }
/* We don't own it, so we must wait for it */ + DPRINT ("Waiting\n"); RtlpWaitForCriticalSection(CriticalSection); }
@@ -486,14 +487,16 @@ /* Chevk if we have an event */ if (!hEvent) {
+ DPRINT ("Creating Event\n"); /* No, so create it */ - if (NT_SUCCESS(Status = NtCreateEvent(hNewEvent, - EVENT_ALL_ACCESS, - NULL, - SynchronizationEvent, - FALSE))) { + if (!NT_SUCCESS(Status = NtCreateEvent(&hNewEvent, + EVENT_ALL_ACCESS, + NULL, + SynchronizationEvent, + FALSE))) {
/* We failed, this is bad... */ + DPRINT1("Failed to Create Event!\n"); InterlockedDecrement(&CriticalSection->LockCount); RtlRaiseStatus(Status); return; @@ -508,11 +511,13 @@ } else {
/* Some just created an event */ + DPRINT("Closing already created event!\n"); NtClose(hNewEvent); }
/* Set either the new or the old */ CriticalSection->LockSemaphore = hEvent; + DPRINT("Event set!\n"); }
return;