-
Notifications
You must be signed in to change notification settings - Fork 7
Description
::eventuals::Timer() seems to occasionally miss Interrupts, e.g. when run as part of an ::eventuals::ControLoop().
Experimentally, the problem appears to be that Timers install interrupt handlers, but that handler installation may fail, and Timer doesn't check whether or not the installation succeeded. Sample non-checked handler installation:
eventuals/eventuals/event-loop.h
Line 374 in 2e8cd9f
| handler_->Install(); |
When interrupts are missed, timers can't be cancelled (since interrupts are the cancellation mechanism).
I can't seem to create a minimal repro for this (when I try to use just timers in a loop, everything reliably passes). But this happens non-deterministically (e.g. ~5% failure rate) in reboot-dev/respect@4686216 (#790) . When this happened locally in a larger example, I verified handler installation failure by adding CHECK()s around handler_->Install(); calls in event-loop.h, and saw that those CHECKs sometimes failed.
@benh mentioned that @onelxj might already be working on a fix for this.