fix Thread.ident when it is the main thread or a dummy thread #5632

This commit is contained in:
Benjamin Peterson 2009-03-31 21:34:42 +00:00
parent a08e8dedc2
commit d906ea62c8
3 changed files with 22 additions and 1 deletions

View File

@ -83,11 +83,24 @@ class ThreadTests(unittest.TestCase):
t.join(NUMTASKS)
self.assert_(not t.is_alive())
self.failIfEqual(t.ident, 0)
self.assertFalse(t.ident is None)
self.assert_(re.match('<TestThread\(.*, \w+ -?\d+\)>', repr(t)))
if verbose:
print 'all tasks done'
self.assertEqual(numrunning.get(), 0)
def test_ident_of_no_threading_threads(self):
# The ident still must work for the main thread and dummy threads.
self.assertFalse(threading.currentThread().ident is None)
def f():
ident.append(threading.currentThread().ident)
done.set()
done = threading.Event()
ident = []
thread.start_new_thread(f, ())
done.wait()
self.assertFalse(ident[0] is None)
# run with a small(ish) thread stack size (256kB)
def test_various_ops_small_stack(self):
if verbose:

View File

@ -500,9 +500,12 @@ class Thread(_Verbose):
return
raise
def _set_ident(self):
self.__ident = _get_ident()
def __bootstrap_inner(self):
try:
self.__ident = _get_ident()
self._set_ident()
self.__started.set()
with _active_limbo_lock:
_active[self.__ident] = self
@ -733,6 +736,7 @@ class _MainThread(Thread):
def __init__(self):
Thread.__init__(self, name="MainThread")
self._Thread__started.set()
self._set_ident()
with _active_limbo_lock:
_active[_get_ident()] = self
@ -778,6 +782,7 @@ class _DummyThread(Thread):
del self._Thread__block
self._Thread__started.set()
self._set_ident()
with _active_limbo_lock:
_active[_get_ident()] = self

View File

@ -199,6 +199,9 @@ Core and Builtins
Library
-------
- Issue #5632: Thread.ident was None for the main thread and threads not created
with the threading module.
- Issue #5400: Added patch for multiprocessing on netbsd compilation/support
- Issue #5387: Fixed mmap.move crash by integer overflow.