cleanup by closing channels after shutdown
handle graceful & forceful shutdown differently

in the case of a graceful shutdown, we can be certain a particular flow is
followed but with a forceful shutdown state can end up out of sync, so we
set state ourselves to ensure its what we expect