mirror of
https://github.com/reactos/reactos.git
synced 2024-08-15 08:03:55 +00:00
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:
parent
abd7686a78
commit
27780dc59a
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue