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