From 615878bb05b85abbcc5493bd07bb9af5a83f2fad Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 25 Oct 2017 16:34:52 +0200 Subject: [PATCH] init: periodic state updates if sensible Under certain circumstances we don't want inits state report to become too outdated even if there is no change to its config or the sessions of its children. This is the case if init is requested to provide a capability or RAM info of it's children via its state report. Now, init automatically updates the state report with each 1000 ms if the attribute 'child_caps' or 'child_ram' is positively set in the 'report' tag. --- repos/os/src/init/state_reporter.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/repos/os/src/init/state_reporter.h b/repos/os/src/init/state_reporter.h index 4739ab9c3..cf6bf528d 100644 --- a/repos/os/src/init/state_reporter.h +++ b/repos/os/src/init/state_reporter.h @@ -52,10 +52,14 @@ class Init::State_reporter : public Report_update_trigger Version _version; Constructible _timer; + Constructible _timer_periodic; Signal_handler _timer_handler { _env.ep(), *this, &State_reporter::_handle_timer }; + Signal_handler _timer_periodic_handler { + _env.ep(), *this, &State_reporter::_handle_timer }; + bool _scheduled = false; void _handle_timer() @@ -134,6 +138,18 @@ class Init::State_reporter : public Report_update_trigger if (trigger_update) trigger_report_update(); + + if (_report_detail->child_ram() || _report_detail->child_caps()) { + if (!_timer_periodic.constructed()) { + _timer_periodic.construct(_env); + _timer_periodic->sigh(_timer_periodic_handler); + } + _timer_periodic->trigger_periodic(1000*1000); + } else { + if (_timer_periodic.constructed()) { + _timer_periodic.destruct(); + } + } } void trigger_report_update() override