RFC: support pipe reads based on a condition.
authorRonald G. Minnich <rminnich@gmail.com>
Tue, 17 Sep 2013 06:17:26 +0000 (23:17 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 02:01:23 +0000 (18:01 -0800)
commitd622afdc32bb7e30fd070c83e9b15677145d27cb
tree2e4ac27471a7becf7ea3de76e98b371a6287dad0
parent2c09ac4276733c5c18a04a49062c53577d19e421
RFC: support pipe reads based on a condition.

This is a proposal for pipe reading conditioned on a function. It is often
necessary to read lock a pipe and read data from it until some condition is met.
It is essential that we keep the lock for our own uses until we are done, to ensure
integral copyout of possibly fragmented RPC and other requests. Note this
was not an issue with the Plan 9 'il' protocol, became an issue with IP V4,
and will not be an issue with IP V6. But we have to support v4, even though
we're supposed to be beyond all that now. Legacy sucks.

The apipe_read_cond is called with a function, f, and an arg. Each time the
pipe is non-empty, f is called with the pipe and arg as parameters. F returns
0 until some condition is met, in which case it returns > 0, or until failure,
in which case it returns < 0. f may read data from the pipe by calling
apipe_read_locked.

If this design meets with approval (ha!) then I can create a qio function that
uses these semantics. But, I expect the Akaros guys will do something
better :-)

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
kern/include/apipe.h
kern/src/apipe.c