- KeSetTimerEx: When canceling the insertion of an expired timer, don't forget to exit the dispatcher and return. Fixes crashes exposed by kernel32 Winetest "timer", caused by KiTimerTableListHead suddenly having broken entries.

- Also fix a comment -- KiExitDispatcher doesn't release the dispatcher lock, it is done in KxInsertTimer

svn path=/trunk/; revision=37068
This commit is contained in:
Stefan Ginsberg 2008-10-29 16:24:36 +00:00
parent 59b469b1fb
commit 47144dde75

View file

@ -398,6 +398,10 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
/* Check if we need to do an interrupt */
if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
/* Exit the dispatcher and return the old state */
KiExitDispatcher(OldIrql);
return Inserted;
}
/* Set the time as Absolute */
@ -419,7 +423,7 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
Timer->Header.SignalState = FALSE;
KxInsertTimer(Timer, Hand);
/* Release Dispatcher Lock */
/* Exit the dispatcher */
KiExitDispatcher(OldIrql);
/* Return old state */