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.)
Regards, Steve Harp
[1] https://sourceforge.net/p/genode/mailman/message/35912728/