On Mon Nov 25, 2013 at 20:21:07 +0100, Bjoern Doebel wrote:
I have two tasks running and communicating through an IPC connection (basically the clntsrv demo). Now I would like to extend this a bit:
Using an ipc_call(), the client (actually: multiple clients) should be able to register with a server to receive a wakeup IPC at individually different points in time in the future.
(First, flawed idea to do this was to *not* use the combined reply_and_wait call on the server side but instead to only do a wait() call and then postpone the corresponding reply() until when the client should be woken up. However, I learned that this will not work because the implicit reply capability will be lost as soon as another ipc call is done by the server.)
Next idea now is to create another IPC channel in the client and to pass (via IPC) the send capability for that channel to the server. The client shall than block in an ipc_receive() on that channel and the server can wake it by sending to that channel. I guess this should be possible and for a seasoned Fiasco.OC/L4Re expert it is probably quite easy to do, but I can't seem to find how to:
Another possibility regarding wakeups/notifications is to use L4::Irq's. They transfer no payload but allow to notify someone else without requiring an IPC channel. Maybe that's also ok for your use-case?
Adam