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; }