/* Initialize the Dispatch Header */
KeInitializeDispatcherHeader(&Timer->Header,
- InternalNotificationTimer + Type,
+ TimerNotificationObject + Type,
sizeof(KTIMER) / sizeof(ULONG),
FALSE);
- /* Initalize the List Head and other data */
- InitializeListHead(&Timer->Header.WaitListHead);
+ /* Initalize the Other data */
Timer->DueTime.QuadPart = 0;
Timer->Period = 0;
}
Timer->Dpc = Dpc;
Timer->Period = Period;
Timer->Header.SignalState = FALSE;
- Timer->Header.Absolute = FALSE;
/* Insert it */
if (!KiInsertTimer(Timer, DueTime)) {
PVOID SystemArgument1,
PVOID SystemArgument2)
{
- ULONG Eip = (ULONG)SystemArgument1;
PKTIMER Timer;
ULONGLONG InterruptTime;
LIST_ENTRY ExpiredTimerList;
}
DPRINT("Timers expired\n");
- /* Add a Profile Event */
- KiAddProfileEvent(ProfileTime, Eip);
/* Release Dispatcher Lock */
KeReleaseDispatcherDatabaseLock(OldIrql);
/* Set it as Signaled */
DPRINT("Setting Timer as Signaled\n");
Timer->Header.SignalState = TRUE;
- KiDispatcherObjectWake(&Timer->Header, 0);
+ KiWaitTest(&Timer->Header, IO_NO_INCREMENT);
/* If the Timer is periodic, reinsert the timer with the new due time */
if (Timer->Period) {
if (!KiInsertTimer(Timer, DueTime)) {
/* FIXME: I will think about how to handle this and fix it ASAP -- Alex */
- DPRINT1("CRITICAL UNHANDLED CASE: TIMER ALREADY EXPIRED!!!\n");
+ DPRINT("CRITICAL UNHANDLED CASE: TIMER ALREADY EXPIRED!!!\n");
};
}
DPRINT("KiInsertTimer(Timer %x DueTime %I64d)\n", Timer, DueTime.QuadPart);
- /* Set it as Inserted */
+ /* Set default data */
Timer->Header.Inserted = TRUE;
+ Timer->Header.Absolute = FALSE;
+ if (!Timer->Period) Timer->Header.SignalState = FALSE;
/* Convert to relative time if needed */
if (DueTime.u.HighPart >= 0) {