diff --git a/repos/base-foc/src/core/signal_source_component.cc b/repos/base-foc/src/core/signal_source_component.cc index fccae73304..4f036070f5 100644 --- a/repos/base-foc/src/core/signal_source_component.cc +++ b/repos/base-foc/src/core/signal_source_component.cc @@ -71,8 +71,7 @@ Signal_source::Signal Signal_source_component::wait_for_signal() Signal_source_component::Signal_source_component(Rpc_entrypoint *ep) : Signal_source_rpc_object(*cap_map()->insert(platform_specific()->cap_id_alloc()->alloc())), - _entrypoint(ep), _finalizer(*this), - _finalizer_cap(_entrypoint->manage(&_finalizer)) + _entrypoint(ep) { using namespace Fiasco; @@ -84,13 +83,6 @@ Signal_source_component::Signal_source_component(Rpc_entrypoint *ep) Signal_source_component::~Signal_source_component() -{ - _finalizer_cap.call(); - _entrypoint->dissolve(&_finalizer); -} - - -void Signal_source_component::Finalizer_component::exit() { /* * On Fiasco.OC, the signal-source client does not use a blocking call diff --git a/repos/base-sel4/src/core/signal_source_component.cc b/repos/base-sel4/src/core/signal_source_component.cc index 49e3432204..0d5ea80e33 100644 --- a/repos/base-sel4/src/core/signal_source_component.cc +++ b/repos/base-sel4/src/core/signal_source_component.cc @@ -70,8 +70,7 @@ Signal_source::Signal Signal_source_component::wait_for_signal() Signal_source_component::Signal_source_component(Rpc_entrypoint *ep) : - _entrypoint(ep), _finalizer(*this), - _finalizer_cap(_entrypoint->manage(&_finalizer)) + _entrypoint(ep) { Platform &platform = *platform_specific(); Range_allocator &phys_alloc = *platform.ram_alloc(); @@ -87,11 +86,4 @@ Signal_source_component::Signal_source_component(Rpc_entrypoint *ep) } -Signal_source_component::~Signal_source_component() -{ - _finalizer_cap.call(); - _entrypoint->dissolve(&_finalizer); -} - - -void Signal_source_component::Finalizer_component::exit() { } +Signal_source_component::~Signal_source_component() { } diff --git a/repos/base/src/core/include/signal_source_component.h b/repos/base/src/core/include/signal_source_component.h index 0c85db58be..1b6ab82661 100644 --- a/repos/base/src/core/include/signal_source_component.h +++ b/repos/base/src/core/include/signal_source_component.h @@ -75,44 +75,11 @@ class Genode::Signal_context_component : public Rpc_object, class Genode::Signal_source_component : public Signal_source_rpc_object { - /** - * Helper for clean destruction of signal-receiver component - * - * Normally, reply capabilities are implicitly destroyed when answering - * an RPC call. But when destructing a signal session while a signal- - * receiver client is blocking on a 'wait_for_signal' call, this - * blocking call will never return via the normal control flow - * (signal submission). In this case, the reply capability would - * outlive the signal session. To avoid the leakage of such reply - * capabilities, we let the signal-session destructor perform a - * core-local RPC call to the so-called 'Finalizer' object, which has - * the sole purpose of replying to the last outstanding - * 'wait_for_signal' call and thereby releasing the corresponding - * reply capability. - */ - struct Finalizer - { - GENODE_RPC(Rpc_exit, void, exit); - GENODE_RPC_INTERFACE(Rpc_exit); - }; - - struct Finalizer_component : Rpc_object - { - Signal_source_component &source; - - Finalizer_component(Signal_source_component &source) - : source(source) { } - - void exit(); - }; - private: Signal_queue _signal_queue; Rpc_entrypoint *_entrypoint; Native_capability _reply_cap; - Finalizer_component _finalizer; - Capability _finalizer_cap; public: diff --git a/repos/base/src/core/include/trace/session_component.h b/repos/base/src/core/include/trace/session_component.h index 9693e43a81..1bf83d432d 100644 --- a/repos/base/src/core/include/trace/session_component.h +++ b/repos/base/src/core/include/trace/session_component.h @@ -58,7 +58,7 @@ class Genode::Trace::Session_component ram(ram), ds(ram.alloc(size)), base(env_deprecated()->rm_session()->attach(ds)), - size(ds.call()) + size(ram.dataspace_size(ds)) { } ~Argument_buffer() diff --git a/repos/base/src/core/main.cc b/repos/base/src/core/main.cc index 2a99aca8bd..07c187b1ec 100644 --- a/repos/base/src/core/main.cc +++ b/repos/base/src/core/main.cc @@ -106,12 +106,6 @@ class Core_child : public Child_policy { private: - /* - * Entry point used for serving the parent interface - */ - Rpc_entrypoint _entrypoint; - enum { STACK_SIZE = 4 * 1024 * sizeof(Genode::addr_t)}; - Registry &_services; Capability _core_pd_cap; @@ -133,18 +127,16 @@ class Core_child : public Child_policy Core_child(Registry &services, Region_map &local_rm, Pd_session &core_pd, Capability core_pd_cap, Cpu_session &core_cpu, Capability core_cpu_cap, - Cap_quota cap_quota, Ram_quota ram_quota) + Cap_quota cap_quota, Ram_quota ram_quota, + Rpc_entrypoint &ep) : - _entrypoint(nullptr, STACK_SIZE, "init_child", false), _services(services), _core_pd_cap (core_pd_cap), _core_pd (core_pd), _core_cpu_cap(core_cpu_cap), _core_cpu(core_cpu), _cap_quota(Child::effective_quota(cap_quota)), _ram_quota(Child::effective_quota(ram_quota)), - _child(local_rm, _entrypoint, *this) - { - _entrypoint.activate(); - } + _child(local_rm, ep, *this) + { } /**************************** @@ -314,7 +306,7 @@ int main() static Reconstructible init(services, local_rm, core_pd, core_pd_cap, core_cpu, core_cpu_cap, - init_cap_quota, init_ram_quota); + init_cap_quota, init_ram_quota, ep); platform()->wait_for_exit(); diff --git a/repos/base/src/core/signal_source_component.cc b/repos/base/src/core/signal_source_component.cc index c3abf63b4d..50ebbedd02 100644 --- a/repos/base/src/core/signal_source_component.cc +++ b/repos/base/src/core/signal_source_component.cc @@ -88,23 +88,15 @@ Signal_source::Signal Signal_source_component::wait_for_signal() Signal_source_component::Signal_source_component(Rpc_entrypoint *ep) : - _entrypoint(ep), _finalizer(*this), - _finalizer_cap(_entrypoint->manage(&_finalizer)) + _entrypoint(ep) { } Signal_source_component::~Signal_source_component() { - _finalizer_cap.call(); - _entrypoint->dissolve(&_finalizer); -} - - -void Signal_source_component::Finalizer_component::exit() -{ - if (!source._reply_cap.valid()) + if (!_reply_cap.valid()) return; - source._entrypoint->reply_signal_info(source._reply_cap, 0, 0); - source._reply_cap = Untyped_capability(); + _entrypoint->reply_signal_info(_reply_cap, 0, 0); + _reply_cap = Untyped_capability(); }