there is a race condition here with RDY count.

Consider this chain of events:

* in backoff with a single RDY 1
* receive single message
* msg is FIN'd and .success() is called on backoff_timer clearing the timer back to 0.
* timer is now in success state and returns no interval. the reader is permanently starved. No future messages will arrive to trigger opportunistic RDY count updating, and the interval is zero so the backoff_block will never be set back to True, and RDY will never be updated to it's normal value.

The logic here needs to correctly account for leaving backoff state, and trigger a function calling normal RDY count updating for all connections. Essentially this needs to be `if in_backoff: ... elif leaving_backoff: .... else: (assume RDY updating done at message receive)`