summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2009-03-31 21:40:18 (GMT)
committerBenjamin Peterson <benjamin@python.org>2009-03-31 21:40:18 (GMT)
commit61611f84c91b3cd6d70e8f554efcef243f3413d1 (patch)
tree89106dfe4a381a55b579a0149b72974a6314f9cf
parenta6f278cfa237ae56bb24468baeed335540bf3b32 (diff)
downloadcpython-61611f84c91b3cd6d70e8f554efcef243f3413d1.zip
cpython-61611f84c91b3cd6d70e8f554efcef243f3413d1.tar.gz
cpython-61611f84c91b3cd6d70e8f554efcef243f3413d1.tar.bz2
Merged revisions 70897 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r70897 | benjamin.peterson | 2009-03-31 16:34:42 -0500 (Tue, 31 Mar 2009) | 1 line fix Thread.ident when it is the main thread or a dummy thread #5632 ........
-rw-r--r--Lib/test/test_threading.py13
-rw-r--r--Lib/threading.py7
-rw-r--r--Misc/NEWS3
3 files changed, 22 insertions, 1 deletions
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index c8f9cac..0057d0e 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 a776c66..c1791d7 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()
_active_limbo_lock.acquire()
_active[self.__ident] = self
@@ -734,6 +737,7 @@ class _MainThread(Thread):
def __init__(self):
Thread.__init__(self, name="MainThread")
self._Thread__started.set()
+ self._set_ident()
_active_limbo_lock.acquire()
_active[_get_ident()] = self
_active_limbo_lock.release()
@@ -780,6 +784,7 @@ class _DummyThread(Thread):
del self._Thread__block
self._Thread__started.set()
+ self._set_ident()
_active_limbo_lock.acquire()
_active[_get_ident()] = self
_active_limbo_lock.release()
diff --git a/Misc/NEWS b/Misc/NEWS
index b3befb0..21268fe 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -92,6 +92,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
- Fix and properly document the multiprocessing module's logging