diff --git a/repos/base-sel4/src/lib/base/ipc.cc b/repos/base-sel4/src/lib/base/ipc.cc
index 11d13b0089..b475cae4be 100644
--- a/repos/base-sel4/src/lib/base/ipc.cc
+++ b/repos/base-sel4/src/lib/base/ipc.cc
@@ -60,6 +60,22 @@ static unsigned &rcv_sel()
}
+/*****************************
+ ** Startup library support **
+ *****************************/
+
+void prepare_reinit_main_thread()
+{
+ /**
+ * Reset selector to invalid, so that a new fresh will be allocated.
+ * The IPC buffer of the thread must be configured to point to the
+ * receive selector which is done by Capability_space::alloc_rcv_sel(),
+ * which finally calls seL4_SetCapReceivePath();
+ */
+ rcv_sel() = 0;
+}
+
+
/**
* Convert Genode::Msgbuf_base content into seL4 message
*
diff --git a/repos/base-sel4/src/lib/base/thread_bootstrap.cc b/repos/base-sel4/src/lib/base/thread_bootstrap.cc
index 509b625b8f..f6919dcfa0 100644
--- a/repos/base-sel4/src/lib/base/thread_bootstrap.cc
+++ b/repos/base-sel4/src/lib/base/thread_bootstrap.cc
@@ -25,8 +25,6 @@
void prepare_init_main_thread() { }
-void prepare_reinit_main_thread() { prepare_init_main_thread(); }
-
/************
** Thread **
diff --git a/repos/base-sel4/src/lib/base/thread_init.cc b/repos/base-sel4/src/lib/base/thread_init.cc
index 235f9b4caf..f46086baaa 100644
--- a/repos/base-sel4/src/lib/base/thread_init.cc
+++ b/repos/base-sel4/src/lib/base/thread_init.cc
@@ -13,12 +13,16 @@
/* Genode includes */
#include
-#include
-#include
+#include
using namespace Genode;
void Thread::_init_platform_thread(size_t, Type type)
{
+ /**
+ * Reset to default values. The default values trigger initial allocations
+ * and associations the thread, like IPCbuffer in ipc.cc.
+ */
+ native_thread() = Native_thread();
}