close_if_idle promises not to change state if it doesn't decide to close?

I kinda think all the return cases should be enumerated here. Then we can dialyze and check it's all correct.