We should only get fatal exceptions here, which means that something is wrong with this thread; if we want the Scheduler to try its best to stay alive I came to the conclusion that trying to start a new thread might be the last resort (which will fail if the fatality of the exception was not “local”).

The race you mention is between stopping and recovering, and only for the Thread.interrupt() purpose which is an optimization, so it is not really relevant AFAICT.