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;