Isn't there a risk that calling `interrupt` will leave various data-structures in a corrupt/inconsistent state here? From what I can see `cleaner.stop()` is called before a bunch of other things stop. What if, e.g. the cleaning thread is in the middle of some code that mutates a datastructure in the DAG scheduler or some other data structure that is later stopped... does that ever happen?