diff -r 2c9e07db0ac4 Lib/threading.py --- a/Lib/threading.py Tue Sep 13 09:27:07 2016 -0700 +++ b/Lib/threading.py Tue Sep 13 20:42:53 2016 +0200 @@ -838,9 +838,9 @@ if not self._initialized: raise RuntimeError("thread.__init__() not called") - if self._started.is_set(): - raise RuntimeError("threads can only be started once") with _active_limbo_lock: + if self._started.is_set() or self in _limbo: + raise RuntimeError("threads can only be started once") _limbo[self] = self try: _start_new_thread(self._bootstrap, ())