Server loop does not call dispatch only when running in pthread

Adam Lackorzynski adam at os.inf.tu-dresden.de
Mon Nov 24 23:48:18 CET 2014


Hi,

On Mon Nov 24, 2014 at 11:06:36 +0100, Tobias Sturm wrote:
> I want to have the loop() method of a Registry_server instance inside a
> pthread. When the client sends messages, I get the IPC error 35 (could
> not figure out what that error code means).
> 
> As soon as the loop() is invoked in my main thread, messages come
> through. Here is some pseudo code:
> 
> 
> start_thread() {
>   //pack args
>   int err = pthread_create(&my_thread, NULL, &thread_fn, &args);
>   printf("pthread_create says %d", err);
> }
> 
> thread_fn(args) {
>   L4Re::Util::Registry_server<>* svr = args.server;
>   server_obj* my_server = args.server_obj_instance;
> 
>   svr->registry()->register_obj(my_server, "foo");
>   svr->loop();
> }
> 
> class server_obj : public L4::Server_object {
>   public:
>     int dispatch( ... );
> }
> 
> server_obj::dispatch(...) {
>  //never called
> }

The server object (srv) constructor has a default argument telling it
the thread to attach to. The default is l4re_env()->main_thread.  In
your case you have to give it
L4::Cap<L4::Thread>(pthread_getl4cap(my_thread)) (or pthread_self()),
so that messages will be going to the pthread.



Adam
-- 
Adam                 adam at os.inf.tu-dresden.de
  Lackorzynski         http://os.inf.tu-dresden.de/~adam/



More information about the l4-hackers mailing list