qio: Ensure qwait() sets Qstarve
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 31 Aug 2015 20:51:46 +0000 (16:51 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
commit2c165333d6db47195d79f22798a3eb6ac5279e80
tree6ec34a30292fea97e00acf9a023b856dd5c786d9
parentcc7a1a60bd9eeb408ba9c39151641a76f7cebaec
qio: Ensure qwait() sets Qstarve

Qstarve tracks the status of the queue.  When the flag is set, the queue
was checked and was found empty.  All of the wakeup code (grep dowakeup)
will check Qstarve.

A couple things to note:
- Qstarve is an optimization.  You should be able to just call
  rendez_wakeup and whatever else.  However, those can be expensive.
- This is false: "The queue is empty only if Qstarve is set".  It is
  possible for the queue to have been drained to 0, but not all the way,
and Qstarve is not set.  It will be set when some thread attempts to
extract data.

Ideally, this would be merged with the (already pushed)
3e0ae7c72ced ("qio: Add non-blocking queues")
kern/src/ns/qio.c