take the usual lock precautions around _active_limbo_lock

This commit is contained in:
Benjamin Peterson 2009-03-31 21:06:30 +00:00
parent 186188d89d
commit bd9dd31abd

View file

@ -466,9 +466,8 @@ class Thread(_Verbose):
raise RuntimeError("thread already started") raise RuntimeError("thread already started")
if __debug__: if __debug__:
self._note("%s.start(): starting thread", self) self._note("%s.start(): starting thread", self)
_active_limbo_lock.acquire() with _active_limbo_lock:
_limbo[self] = self _limbo[self] = self
_active_limbo_lock.release()
_start_new_thread(self.__bootstrap, ()) _start_new_thread(self.__bootstrap, ())
self.__started.wait() self.__started.wait()
@ -505,10 +504,9 @@ class Thread(_Verbose):
try: try:
self.__ident = _get_ident() self.__ident = _get_ident()
self.__started.set() self.__started.set()
_active_limbo_lock.acquire() with _active_limbo_lock:
_active[self.__ident] = self _active[self.__ident] = self
del _limbo[self] del _limbo[self]
_active_limbo_lock.release()
if __debug__: if __debug__:
self._note("%s.__bootstrap(): thread started", self) self._note("%s.__bootstrap(): thread started", self)
@ -735,9 +733,8 @@ class _MainThread(Thread):
def __init__(self): def __init__(self):
Thread.__init__(self, name="MainThread") Thread.__init__(self, name="MainThread")
self._Thread__started.set() self._Thread__started.set()
_active_limbo_lock.acquire() with _active_limbo_lock:
_active[_get_ident()] = self _active[_get_ident()] = self
_active_limbo_lock.release()
def _set_daemon(self): def _set_daemon(self):
return False return False
@ -781,9 +778,8 @@ class _DummyThread(Thread):
del self._Thread__block del self._Thread__block
self._Thread__started.set() self._Thread__started.set()
_active_limbo_lock.acquire() with _active_limbo_lock:
_active[_get_ident()] = self _active[_get_ident()] = self
_active_limbo_lock.release()
def _set_daemon(self): def _set_daemon(self):
return True return True
@ -804,18 +800,14 @@ def currentThread():
current_thread = currentThread current_thread = currentThread
def activeCount(): def activeCount():
_active_limbo_lock.acquire() with _active_limbo_lock:
count = len(_active) + len(_limbo) return len(_active) + len(_limbo)
_active_limbo_lock.release()
return count
active_count = activeCount active_count = activeCount
def enumerate(): def enumerate():
_active_limbo_lock.acquire() with _active_limbo_lock:
active = _active.values() + _limbo.values() return _active.values() + _limbo.values()
_active_limbo_lock.release()
return active
from thread import stack_size from thread import stack_size