From: Benjamin Peterson Date: Tue, 31 Mar 2009 21:34:42 +0000 (+0000) Subject: fix Thread.ident when it is the main thread or a dummy thread #5632 X-Git-Tag: v2.7a1~1667 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d906ea62c8839a55efc313b4161ce124b6f656f0;p=python fix Thread.ident when it is the main thread or a dummy thread #5632 --- diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index cb6f6d2ae9..463d0d88ff 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 28a8a2f946..13409db95b 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 6d6d2925c0..6bded6b0f0 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.