Chunk server: always queue recovery start, error and cancel path optimization isn't worth extra complexity. Queue, actually change state both start and read even if cancel still pending in order to correctly invoke cancellation completion in handle cancel. De-reference in cancel if close is still pending as the un-registering completion handler with reader, and shutting down the reader at the beginning of the handle cancel ensure that the close completion handler (Done()) method will not be invoked.