mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:52:56 +00:00
- 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:
parent
59b469b1fb
commit
47144dde75
1 changed files with 5 additions and 1 deletions
|
@ -398,6 +398,10 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
|
||||||
|
|
||||||
/* Check if we need to do an interrupt */
|
/* Check if we need to do an interrupt */
|
||||||
if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
|
if (RequestInterrupt) HalRequestSoftwareInterrupt(DISPATCH_LEVEL);
|
||||||
|
|
||||||
|
/* Exit the dispatcher and return the old state */
|
||||||
|
KiExitDispatcher(OldIrql);
|
||||||
|
return Inserted;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the time as Absolute */
|
/* Set the time as Absolute */
|
||||||
|
@ -419,7 +423,7 @@ KeSetTimerEx(IN OUT PKTIMER Timer,
|
||||||
Timer->Header.SignalState = FALSE;
|
Timer->Header.SignalState = FALSE;
|
||||||
KxInsertTimer(Timer, Hand);
|
KxInsertTimer(Timer, Hand);
|
||||||
|
|
||||||
/* Release Dispatcher Lock */
|
/* Exit the dispatcher */
|
||||||
KiExitDispatcher(OldIrql);
|
KiExitDispatcher(OldIrql);
|
||||||
|
|
||||||
/* Return old state */
|
/* Return old state */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue