From d906ea62c8839a55efc313b4161ce124b6f656f0 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Tue, 31 Mar 2009 21:34:42 +0000 Subject: fix Thread.ident when it is the main thread or a dummy thread #5632 --- Lib/test/test_threading.py | 13 +++++++++++++ Lib/threading.py | 7 ++++++- Misc/NEWS | 3 +++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index cb6f6d2..463d0d8 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -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('', 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: diff --git a/Lib/threading.py b/Lib/threading.py index 28a8a2f..13409db 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -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 diff --git a/Misc/NEWS b/Misc/NEWS index 6d6d292..6bded6b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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. -- cgit v0.12