From 98cb37b9e45e0947cb8618b2ce5cc039002f0b97 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Tue, 6 Dec 2016 11:55:51 +0100 Subject: [PATCH] drivers/timer: do not submit signals for invalid contexts Setting a timer signal handler with an invalid capability cancels signaling and any periodic timeout. Fix #2192 --- repos/os/src/drivers/timer/include/session_component.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/repos/os/src/drivers/timer/include/session_component.h b/repos/os/src/drivers/timer/include/session_component.h index e223fd81f0..0c324e69e3 100644 --- a/repos/os/src/drivers/timer/include/session_component.h +++ b/repos/os/src/drivers/timer/include/session_component.h @@ -57,7 +57,12 @@ class Timer::Session_component : public Genode::Rpc_object, void trigger_periodic(unsigned us) override { _timeout.schedule_periodic(Microseconds(us), *this); } - void sigh(Signal_context_capability sigh) override { _sigh = sigh; } + void sigh(Signal_context_capability sigh) override + { + _sigh = sigh; + if (!sigh.valid()) + _timeout_scheduler.discard(_timeout); + } unsigned long elapsed_ms() const override { return (_timeout_scheduler.curr_time().value - _init_time_us) / 1000; }