diff --git a/repos/base/src/core/signal_receiver.cc b/repos/base/src/core/signal_receiver.cc index 94de4769b9..f84b733a8b 100644 --- a/repos/base/src/core/signal_receiver.cc +++ b/repos/base/src/core/signal_receiver.cc @@ -16,6 +16,7 @@ /* Genode includes */ #include +#include /* base-internal includes */ #include @@ -35,6 +36,17 @@ void Signal_receiver::unblock_signal_waiter(Rpc_entrypoint &) { ASSERT_NEVER_CAL typedef Signal_context_capability Sigh_cap; -Sigh_cap Signal_receiver::manage(Signal_context *) { ASSERT_NEVER_CALLED; } -void Signal_receiver::block_for_signal() { ASSERT_NEVER_CALLED; } -void Signal_receiver::local_submit(Signal::Data) { ASSERT_NEVER_CALLED; } +Sigh_cap Signal_receiver::manage(Signal_context *) { ASSERT_NEVER_CALLED; } + +void Signal_receiver::block_for_signal() +{ + /* + * Called by 'entrypoint.cc' after leaving the 'Rpc_construct' RPC call. + * This happens in particular when the blocking for the reply for the + * 'Rpc_construct' call is canceled by an incoming SIGCHLD signal, which + * occurs whenever a child component exits. + */ + sleep_forever(); +} + +void Signal_receiver::local_submit(Signal::Data) { ASSERT_NEVER_CALLED; }