Fixed a bug in RtlLeaveCriticalSection. We have only to signal the event
if someone waits on it.
Modified: trunk/reactos/lib/ntdll/rtl/critical.c
_____
Modified: trunk/reactos/lib/ntdll/rtl/critical.c
--- trunk/reactos/lib/ntdll/rtl/critical.c 2005-08-25 12:30:10 UTC
(rev 17537)
+++ trunk/reactos/lib/ntdll/rtl/critical.c 2005-08-25 12:33:37 UTC
(rev 17538)
@@ -329,10 +329,11 @@
CriticalSection->OwningThread = 0;
/* Was someone wanting us? This needs to be done atomically. */
- InterlockedDecrement(&CriticalSection->LockCount);
+ if (-1 != InterlockedDecrement(&CriticalSection->LockCount)) {
- /* Let him have us */
- RtlpUnWaitCriticalSection(CriticalSection);
+ /* Let him have us */
+ RtlpUnWaitCriticalSection(CriticalSection);
+ }
}
/* Sucessful! */