Fix bug in gate code
Modified: trunk/reactos/ntoskrnl/ke/gate.c
_____
Modified: trunk/reactos/ntoskrnl/ke/gate.c
--- trunk/reactos/ntoskrnl/ke/gate.c 2005-06-17 00:13:10 UTC (rev
15941)
+++ trunk/reactos/ntoskrnl/ke/gate.c 2005-06-17 00:13:44 UTC (rev
15942)
@@ -44,8 +44,8 @@
do
{
/* Lock the APC Queue */
- KeAcquireSpinLock(&CurrentThread->ApcQueueLock, &OldIrql);
-
+ OldIrql = KeAcquireDispatcherDatabaseLock();
+
/* Check if it's already signaled */
if (!Gate->Header.SignalState)
{
@@ -53,7 +53,7 @@
Gate->Header.SignalState = 0;
/* Unlock the Queue and return */
- KeReleaseSpinLock(&CurrentThread->ApcQueueLock, OldIrql);
+ KeReleaseDispatcherDatabaseLock(OldIrql);
return;
}
@@ -78,9 +78,6 @@
KiWakeQueue(CurrentThread->Queue);
}
- /* Unlock the Queue*/
- KeReleaseSpinLock(&CurrentThread->ApcQueueLock, OldIrql);
-
/* Block the Thread */
DPRINT("Blocking the Thread: %x\n", CurrentThread);
KiBlockThread(&Status,