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

svn path=/trunk/; revision=12772
This commit is contained in:
Alex Ionescu 2005-01-04 00:10:50 +00:00
parent abd7686a78
commit 27780dc59a
2 changed files with 11 additions and 7 deletions

View file

@ -99,7 +99,6 @@ typedef struct _CRITICAL_SECTION_DEBUG
LIST_ENTRY ProcessLocksList;
ULONG EntryCount;
ULONG ContentionCount;
PVOID OwnerBackTrace[2];
PVOID Spare[2];
} CRITICAL_SECTION_DEBUG, *PCRITICAL_SECTION_DEBUG;

View file

@ -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 @@ RtlEnterCriticalSection(
}
/* We don't own it, so we must wait for it */
DPRINT ("Waiting\n");
RtlpWaitForCriticalSection(CriticalSection);
}
@ -486,14 +487,16 @@ RtlpCreateCriticalSectionSem(
/* 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 @@ RtlpCreateCriticalSectionSem(
} 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;