fixup "monitor/sandbox: use Callable" (more callables)

This commit is contained in:
Norman Feske
2025-01-15 17:44:29 +01:00
parent c564013a5d
commit 1677a36225
3 changed files with 25 additions and 71 deletions

View File

@@ -209,26 +209,13 @@ class Genode::Sandbox::Local_service_base : public Service
using Resources = Session::Resources;
struct Request_fn : Interface
{
virtual void with_requested_session(Request &) = 0;
};
using With_request = Callable<void, Request &>;
using With_upgrade = Callable<Upgrade_response, Session &, Resources const &>;
using With_close = Callable<Close_response, Session &>;
void _for_each_requested_session(Request_fn &);
struct Upgrade_fn : Interface
{
virtual Upgrade_response with_upgraded_session(Session &, Resources) = 0;
};
void _for_each_upgraded_session(Upgrade_fn &);
struct Close_fn : Interface
{
virtual Close_response close_session(Session &) = 0;
};
void _for_each_session_to_close(Close_fn &);
void _for_each_requested_session(With_request::Ft const &);
void _for_each_upgraded_session (With_upgrade::Ft const &);
void _for_each_session_to_close (With_close::Ft const &);
Id_space<Parent::Server> _server_id_space { };
@@ -255,21 +242,9 @@ struct Genode::Sandbox::Local_service : private Local_service_base
* ('resources', 'label', 'diag') and allows the caller to respond
* to the session request ('deliver_session', 'deny').
*/
template <typename FN>
void for_each_requested_session(FN const &fn)
void for_each_requested_session(auto const &fn)
{
struct Untyped_fn : Local_service_base::Request_fn
{
FN const &_fn;
Untyped_fn(FN const &fn) : _fn(fn) { }
void with_requested_session(Request &request) override
{
_fn(request);
}
} untyped_fn(fn);
_for_each_requested_session(untyped_fn);
_for_each_requested_session(With_request::Fn { fn });
}
/**
@@ -281,22 +256,11 @@ struct Genode::Sandbox::Local_service : private Local_service_base
*
* The functor must return an 'Upgrade_response'.
*/
template <typename FN>
void for_each_upgraded_session(FN const &fn)
void for_each_upgraded_session(auto const &fn)
{
struct Untyped_fn : Local_service_base::Upgrade_fn
{
FN const &_fn;
Untyped_fn(FN const &fn) : _fn(fn) { }
Upgrade_response with_upgraded_session(Session &session,
Resources resources) override
{
return _fn(static_cast<ST &>(session), resources);
}
} untyped_fn(fn);
_for_each_upgraded_session(untyped_fn);
_for_each_upgraded_session(With_upgrade::Fn {
[&] (Session &session, Resources const &resources) {
return fn(static_cast<ST &>(session), resources); } });
}
/**
@@ -305,21 +269,11 @@ struct Genode::Sandbox::Local_service : private Local_service_base
* The functor is called with a reference to the session object (type
* 'ST') as argument and must return a 'Close_response'.
*/
template <typename FN>
void for_each_session_to_close(FN const &fn)
void for_each_session_to_close(auto const &fn)
{
struct Untyped_fn : Local_service_base::Close_fn
{
FN const &_fn;
Untyped_fn(FN const &fn) : _fn(fn) { }
Close_response close_session(Session &session) override
{
return _fn(static_cast<ST &>(session));
}
} untyped_fn(fn);
_for_each_session_to_close(untyped_fn);
_for_each_session_to_close(With_close::Fn {
[&] (Session &session) {
return fn(static_cast<ST &>(session)); } });
}
};

View File

@@ -1,7 +1,7 @@
_ZN6Genode7Sandbox12apply_configERKNS_8Xml_nodeE T
_ZN6Genode7Sandbox18Local_service_base26_for_each_session_to_closeERNS1_8Close_fnE T
_ZN6Genode7Sandbox18Local_service_base26_for_each_upgraded_sessionERNS1_10Upgrade_fnE T
_ZN6Genode7Sandbox18Local_service_base27_for_each_requested_sessionERNS1_10Request_fnE T
_ZN6Genode7Sandbox18Local_service_base26_for_each_session_to_closeERKNS_8CallableINS1_14Close_responseEJRNS_7SessionEEE2FtE T
_ZN6Genode7Sandbox18Local_service_base26_for_each_upgraded_sessionERKNS_8CallableINS1_16Upgrade_responseEJRNS_7SessionERKNS4_9ResourcesEEE2FtE T
_ZN6Genode7Sandbox18Local_service_base27_for_each_requested_sessionERKNS_8CallableIvJRNS1_7RequestEEE2FtE T
_ZN6Genode7Sandbox18Local_service_baseC1ERS0_RKNS_6StringILm32EEERNS1_6WakeupE T
_ZN6Genode7Sandbox18Local_service_baseC2ERS0_RKNS_6StringILm32EEERNS1_6WakeupE T
_ZN6Genode7SandboxC1ERNS_3EnvERNS0_13State_handlerE T

View File

@@ -521,7 +521,7 @@ void Genode::Sandbox::Library::apply_config(Xml_node const &config)
** Sandbox::Local_service_base **
*********************************/
void Genode::Sandbox::Local_service_base::_for_each_requested_session(Request_fn &fn)
void Genode::Sandbox::Local_service_base::_for_each_requested_session(With_request::Ft const &fn)
{
_server_id_space.for_each<Session_state>([&] (Session_state &session) {
@@ -529,7 +529,7 @@ void Genode::Sandbox::Local_service_base::_for_each_requested_session(Request_fn
Request request(session);
fn.with_requested_session(request);
fn(request);
bool wakeup_client = false;
@@ -552,7 +552,7 @@ void Genode::Sandbox::Local_service_base::_for_each_requested_session(Request_fn
}
void Genode::Sandbox::Local_service_base::_for_each_upgraded_session(Upgrade_fn &fn)
void Genode::Sandbox::Local_service_base::_for_each_upgraded_session(With_upgrade::Ft const &fn)
{
_server_id_space.for_each<Session_state>([&] (Session_state &session) {
@@ -567,7 +567,7 @@ void Genode::Sandbox::Local_service_base::_for_each_upgraded_session(Upgrade_fn
Session::Resources const amount { session.ram_upgrade,
session.cap_upgrade };
switch (fn.with_upgraded_session(*session.local_ptr, amount)) {
switch (fn(*session.local_ptr, amount)) {
case Upgrade_response::CONFIRMED:
session.phase = Session_state::CAP_HANDED_OUT;
@@ -584,7 +584,7 @@ void Genode::Sandbox::Local_service_base::_for_each_upgraded_session(Upgrade_fn
}
void Genode::Sandbox::Local_service_base::_for_each_session_to_close(Close_fn &close_fn)
void Genode::Sandbox::Local_service_base::_for_each_session_to_close(With_close::Ft const &fn)
{
/*
* Collection of closed sessions to be destructed via callback
@@ -606,7 +606,7 @@ void Genode::Sandbox::Local_service_base::_for_each_session_to_close(Close_fn &c
if (session.local_ptr == nullptr)
return;
switch (close_fn.close_session(*session.local_ptr)) {
switch (fn(*session.local_ptr)) {
case Close_response::CLOSED: