# HG changeset patch # User Paul Boddie # Date 1678976673 -3600 # Node ID 3f427c2a2faf88ca82c7a8da78fa2d4b587b32b8 # Parent e0068e6a2231d5c2faf9f6f1ee122d30f5d3e8b6 On MIPS32, at least, in a payload started by libexec, the main thread is not necessarily returned correctly by pthread_l4_cap(pthread_self()). So a workaround is used when a server is initialised for the main thread. diff -r e0068e6a2231 -r 3f427c2a2faf libfsserver/lib/generic/resource_server.cc --- a/libfsserver/lib/generic/resource_server.cc Wed Mar 15 15:20:18 2023 +0100 +++ b/libfsserver/lib/generic/resource_server.cc Thu Mar 16 15:24:33 2023 +0100 @@ -19,6 +19,7 @@ * Boston, MA 02110-1301, USA */ +#include #include #include @@ -45,6 +46,12 @@ resource_init_config(_config, _resource); _config->thread = pthread_l4_cap(pthread_self()); + /* NOTE: On MIPS32, at least, in a payload started by libexec, the main thread + is not necessarily returned correctly. */ + + if (l4_is_invalid_cap(_config->thread)) + _config->thread = l4re_env()->main_thread; + if (finalisation) { _config->finaliser = resource_same_thread_finaliser;