diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_threading.py | 13 | ||||
-rw-r--r-- | Lib/threading.py | 7 |
2 files changed, 19 insertions, 1 deletions
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('<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: 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 |