I thought about it when I was writing code because drain_queue is always followed by a retry if the queue doesn't get to empty. Kept it this way to keep the higher level (retry) semantics in the caller though.