Improve 'Timed_semaphore' accuracy

Fixes #1421
This commit is contained in:
Christian Prochaska 2015-02-24 16:02:15 +01:00 committed by Christian Helmuth
parent d2b82274db
commit 70540e6f8e
2 changed files with 3 additions and 7 deletions

View File

@ -39,20 +39,19 @@ namespace Genode {
Timer::Connection _timer; /* timer session */
Signal_context _context;
Signal_receiver _receiver;
Genode::Alarm::Time _time; /* current time */
void entry(void);
public:
Timeout_thread() : Thread<4096>("alarm-timer"), _time(0)
Timeout_thread() : Thread<4096>("alarm-timer")
{
_timer.sigh(_receiver.manage(&_context));
_timer.trigger_periodic(JIFFIES_STEP_MS*1000);
start();
}
Genode::Alarm::Time time(void) { return _time; }
Genode::Alarm::Time time(void) { return _timer.elapsed_ms(); }
/*
* Returns the singleton timeout-thread used for all timeouts.

View File

@ -19,11 +19,8 @@ void Genode::Timeout_thread::entry()
while (true) {
Signal s = _receiver.wait_for_signal();
/* increase jiffies counter related to received signals */
_time += JIFFIES_STEP_MS * s.num();
/* handle timouts of this point in time */
Genode::Alarm_scheduler::handle(_time);
Genode::Alarm_scheduler::handle(_timer.elapsed_ms());
}
}