From 18dbd7586015f23b39fd45d5b3dcc6a2cc04dc25 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 8 Nov 2019 13:23:16 +0100 Subject: [PATCH] base: explictly target entrypoint in timer session Fix #3548 --- repos/base/include/timer_session/connection.h | 12 ++++++++++++ repos/base/lib/symbols/ld | 2 ++ repos/base/src/lib/timeout/timer_connection.cc | 9 +++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/repos/base/include/timer_session/connection.h b/repos/base/include/timer_session/connection.h index eef8d641e..5f310fb15 100644 --- a/repos/base/include/timer_session/connection.h +++ b/repos/base/include/timer_session/connection.h @@ -258,6 +258,18 @@ class Timer::Connection : public Genode::Connection, /** * Constructor + * + * \param env environment used for construction (e.g. quota trading) + * \param ep entrypoint used as timeout handler execution context + * \param label optional label used in session routing + */ + Connection(Genode::Env &env, + Genode::Entrypoint & ep, + char const *label = ""); + + /** + * Convenience constructor wrapper using the environment's entrypoint as + * timeout handler execution context */ Connection(Genode::Env &env, char const *label = ""); diff --git a/repos/base/lib/symbols/ld b/repos/base/lib/symbols/ld index c8874645e..2e76e157d 100644 --- a/repos/base/lib/symbols/ld +++ b/repos/base/lib/symbols/ld @@ -53,6 +53,8 @@ _ZN5Timer10Connection8_discardERN6Genode7TimeoutE T _ZN5Timer10Connection9curr_timeEv T _ZN5Timer10ConnectionC1ERN6Genode3EnvEPKc T _ZN5Timer10ConnectionC2ERN6Genode3EnvEPKc T +_ZN5Timer10ConnectionC1ERN6Genode3EnvERNS1_10EntrypointEPKc T +_ZN5Timer10ConnectionC2ERN6Genode3EnvERNS1_10EntrypointEPKc T _ZN6Genode10Entrypoint16_dispatch_signalERNS_6SignalE T _ZN6Genode10Entrypoint16schedule_suspendEPFvvES2_ T _ZN6Genode10Entrypoint22Signal_proxy_component6signalEv T diff --git a/repos/base/src/lib/timeout/timer_connection.cc b/repos/base/src/lib/timeout/timer_connection.cc index 614dd2315..6fb791653 100644 --- a/repos/base/src/lib/timeout/timer_connection.cc +++ b/repos/base/src/lib/timeout/timer_connection.cc @@ -127,19 +127,24 @@ void Timer::Connection::_enable_modern_mode() } -Timer::Connection::Connection(Genode::Env &env, char const *label) +Timer::Connection::Connection(Genode::Env &env, Genode::Entrypoint &ep, + char const *label) : Genode::Connection(env, session(env.parent(), "ram_quota=10K, cap_quota=%u, label=\"%s\"", CAP_QUOTA, label)), Session_client(cap()), - _signal_handler(env.ep(), *this, &Connection::_handle_timeout) + _signal_handler(ep, *this, &Connection::_handle_timeout) { /* register default signal handler */ Session_client::sigh(_default_sigh_cap); } +Timer::Connection::Connection(Genode::Env &env, char const *label) +: Timer::Connection(env, env.ep(), label) {} + + void Timer::Connection::_schedule_one_shot(Timeout &timeout, Microseconds duration) { _enable_modern_mode();