Hello,
I am new to Genode and currently writing a program in which two components communicate with each other over virtual ethernet. The communication using a NIC router works completely fine if started from the main component, but fails whenever initiated from a thread. Hereby
Error: pthread_self() called from alien thread named 'Broker Thread' no RM attachment (READ pf_addr=0x4b8 pf_ip=0x10f62dfc from pager_object: pd='init -> manager' thread='Broker Thread')
is thrown when the 'connect' function is called. I have tried resolving this by simply allocating some RAM and also by initializing a sliced heap, both to no avail. Unfortunately it is imperative for the component to initialize a connection from within a thread. Therefore I would be very grateful for any help regarding this issue. I have attached the thread's code to this mail.
Kind regards,
Kevin Burton
Error: pthread_self() called from alien thread named 'Broker Thread' no RM attachment (READ pf_addr=0x4b8 pf_ip=0x10f62dfc from pager_object: pd='init -> manager' thread='Broker Thread')
Looking at thread.cc, it seems you're subclassing Genode::Thread and (presumably) instantiating it using the Genode thread API.
Others will correct me if I'm wrong but I think as of Genode 19.x it's no longer possible to call the LibC from such "pure native" threads.
You'll have to use the POSIX API instead (pthread_create() etc), and threads created in such a context will correctly register themselves in libc.lib.so and no longer trigger the assert() in pthread_self(), in the ubiquitous errno handling and so on.
Cedric