summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_threading.py13
-rw-r--r--Lib/threading.py7
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