Fix event insertion when processing more than one event for the current time.
This commit is contained in:
parent
25d704f304
commit
0c22be818b
|
@ -1,3 +1,10 @@
|
||||||
|
Fri Apr 28 15:59:27 2000 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
|
* events.c (event_queue_process): Call update_time_from_event
|
||||||
|
every time an event is removed from the queue.
|
||||||
|
(update_time_from_event): Delete assertion that a negative
|
||||||
|
time_from_event implies an empty event queue.
|
||||||
|
|
||||||
Fri Apr 28 15:53:54 2000 Andrew Cagney <cagney@b1.cygnus.com>
|
Fri Apr 28 15:53:54 2000 Andrew Cagney <cagney@b1.cygnus.com>
|
||||||
|
|
||||||
* interrupts.c (deliver_hardware_interrupt): Print time trace in
|
* interrupts.c (deliver_hardware_interrupt): Print time trace in
|
||||||
|
|
|
@ -180,7 +180,6 @@ update_time_from_event(event_queue *events)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ASSERT(current_time == event_queue_time(events));
|
ASSERT(current_time == event_queue_time(events));
|
||||||
ASSERT((events->time_from_event >= 0) == (events->queue != NULL));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC_INLINE_EVENTS\
|
STATIC_INLINE_EVENTS\
|
||||||
|
@ -394,12 +393,15 @@ event_queue_process(event_queue *events)
|
||||||
(long)handler,
|
(long)handler,
|
||||||
(long)data));
|
(long)data));
|
||||||
zfree(to_do);
|
zfree(to_do);
|
||||||
|
/* Always re-compute the time to the next event so that HANDLER()
|
||||||
|
can safely insert new events into the queue. */
|
||||||
|
update_time_from_event(events);
|
||||||
handler(data);
|
handler(data);
|
||||||
}
|
}
|
||||||
events->processing = 0;
|
events->processing = 0;
|
||||||
|
|
||||||
/* re-caculate time for new events */
|
ASSERT(events->time_from_event > 0);
|
||||||
update_time_from_event(events);
|
ASSERT(events->queue != NULL); /* always poll event */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue