libc and Genode signal handlers, RPC

Steven Harp steven.harp at ...486...
Mon Dec 18 00:38:59 CET 2017

  Release 17.02 introduced a new execution model of the C runtime
which was, I believe, intended to make it possible to write components 
that combine regular Genode signal handlers and RPC with code using libc.
This would be very handy for porting network services etc that
are greatly simplified by the C runtime.

Q:  Is there a preferred model for the interaction between the libc
and non-libc parts of such a component?  For example, suppose we want
to make the libc code block on a Genode signal (asynchronous event)?

After reading discussion [1] I found that running the libc elements
in a new Genode thread, and blocking on a Genode::Semaphore was a workable
option, though perhaps not very elegant. The naive approach (using the 
semaphore without the  extra thread) seems to lead to a situation where
signals are received but never unblock the libc code. 

Can anyone recommend some examples/tests that illustrate the intended
new approach for:
(a) libc code blocking on a Genode signal,
(b) a component's RPC service invoking some code using libc
(c) libc code invoking Genode RPC
(d) invoking libc code in Genode callback, e.g. timeout handler

(My question relates to the 17.11 version of Genode.)

  Steve Harp


More information about the users mailing list