backoff_block should probably be set here instead of in handle_message. 

Setting it here will keep from a successful FIN undoing the backoff state before it's triggered by a handle_message(). 

Also, at the time backoff is triggered we need to cancel any pending RDY count and drop to RDY 0. It looks like current RDY state change for backoff allows any pending RDY to be fulfilled.