qio: Fix potential memory leak in __qbread()
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 26 May 2017 16:41:11 +0000 (12:41 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 26 May 2017 16:41:11 +0000 (12:41 -0400)
commit0dd7726d4c35ecb84712c31a2e88b8ded0d6f57b
tree44d124365c8fd87f609eb2136337d106c2835707
parentc61ed6c456ae9e81ef84a990b12aea2306c4666c
qio: Fix potential memory leak in __qbread()

The race could happen where we __try_qbread(), see we need a spare to split
the first block, but when we go in the next time the queue is empty or some
other condition that triggers an error().

Like with __qwrite(), only some callers are allowed to use waserror and
throw, so we need to be careful about when we do the error unwinding.

Also, for whatever reason, we need these volatiles when dealing with
waserror().  I checked the ASM again, and the compiler will not realize
that 'spare' could have changed, despite the "returns twice" attribute
deeper in waserror().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/ns/qio.c