Hello Genodians
We are still trying to introduce a named pipe for communication between libc components and pure genode components. Our vfs fifo pipe now works with multiple threads in the same process, but only when it's hosted in the vfs of that same component. As soon as we host it in separate vfs component it stalls randomly.
Our analysis shows that the reason for this lies in the implementation of the file system session interface, where the write operation doesn't report back the number of bytes written but the receiving vfs component instead retries the write operation. This leads to a permanent blocking of the vfs component as no read operation can alleviate the full buffer of the fifo pipe.
We think the only proper fix would be a change in the file system session to allow the write operation to report back the number of bytes written. Is there a specific reason to keep the write 'fire-and-forget', other than simplicity?
Best regards
Stefan