Kaydet (Commit) d906ea62 authored tarafından Benjamin Peterson's avatar Benjamin Peterson

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

üst a08e8ded
...@@ -83,11 +83,24 @@ class ThreadTests(unittest.TestCase): ...@@ -83,11 +83,24 @@ class ThreadTests(unittest.TestCase):
t.join(NUMTASKS) t.join(NUMTASKS)
self.assert_(not t.is_alive()) self.assert_(not t.is_alive())
self.failIfEqual(t.ident, 0) self.failIfEqual(t.ident, 0)
self.assertFalse(t.ident is None)
self.assert_(re.match('<TestThread\(.*, \w+ -?\d+\)>', repr(t))) self.assert_(re.match('<TestThread\(.*, \w+ -?\d+\)>', repr(t)))
if verbose: if verbose:
print 'all tasks done' print 'all tasks done'
self.assertEqual(numrunning.get(), 0) 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) # run with a small(ish) thread stack size (256kB)
def test_various_ops_small_stack(self): def test_various_ops_small_stack(self):
if verbose: if verbose:
......
...@@ -500,9 +500,12 @@ class Thread(_Verbose): ...@@ -500,9 +500,12 @@ class Thread(_Verbose):
return return
raise raise
def _set_ident(self):
self.__ident = _get_ident()
def __bootstrap_inner(self): def __bootstrap_inner(self):
try: try:
self.__ident = _get_ident() self._set_ident()
self.__started.set() self.__started.set()
with _active_limbo_lock: with _active_limbo_lock:
_active[self.__ident] = self _active[self.__ident] = self
...@@ -733,6 +736,7 @@ class _MainThread(Thread): ...@@ -733,6 +736,7 @@ 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()
self._set_ident()
with _active_limbo_lock: with _active_limbo_lock:
_active[_get_ident()] = self _active[_get_ident()] = self
...@@ -778,6 +782,7 @@ class _DummyThread(Thread): ...@@ -778,6 +782,7 @@ class _DummyThread(Thread):
del self._Thread__block del self._Thread__block
self._Thread__started.set() self._Thread__started.set()
self._set_ident()
with _active_limbo_lock: with _active_limbo_lock:
_active[_get_ident()] = self _active[_get_ident()] = self
......
...@@ -199,6 +199,9 @@ Core and Builtins ...@@ -199,6 +199,9 @@ Core and Builtins
Library 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 #5400: Added patch for multiprocessing on netbsd compilation/support
- Issue #5387: Fixed mmap.move crash by integer overflow. - Issue #5387: Fixed mmap.move crash by integer overflow.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment