mirror of
https://github.com/python/cpython.git
synced 2025-07-28 13:44:43 +00:00
fix Thread.ident when it is the main thread or a dummy thread #5632
This commit is contained in:
parent
a08e8dedc2
commit
d906ea62c8
3 changed files with 22 additions and 1 deletions
|
@ -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):
|
||||||
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):
|
||||||
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):
|
||||||
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
|
||||||
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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue