I think it is, because otherwise it is possible for the program to block waiting for a thread to notify that it is done when there are no more threads running. For example, while the main thread is in line 247, if a state runner thread notifies, then it will be missed. If this is the last running thread, then it causes a infinite wait.
An alternative might be to move the `_done_cond.aquire()` to the to before the outcome check, although I think then it is still possible to miss a thread notification when checking `not smach.is_shutdown()`