diff options
author | Tim Peters <tim.peters@gmail.com> | 2005-01-08 07:30:42 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2005-01-08 07:30:42 (GMT) |
commit | 711906e0c26c010600221da50aa930008b8a9447 (patch) | |
tree | 3e5ac91205cbd5f93a7d9efc669ebc3f6d6a1a1c /Lib/threading.py | |
parent | 84d548994ea58385e398baf1bf015aa6b258f7bb (diff) | |
download | cpython-711906e0c26c010600221da50aa930008b8a9447.zip cpython-711906e0c26c010600221da50aa930008b8a9447.tar.gz cpython-711906e0c26c010600221da50aa930008b8a9447.tar.bz2 |
threading._DummyThread.__init__(): document obscure new code.
test_threading.test_foreign_thread(): new test does a basic check that
"foreign" threads can using the threading module, and that they create
a _DummyThread instance in at least one use case. This isn't a very
good test, since a thread created by thread.start_new_thread() isn't
particularly "foreign".
Diffstat (limited to 'Lib/threading.py')
-rw-r--r-- | Lib/threading.py | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Lib/threading.py b/Lib/threading.py index 61c25b6..1aed551 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -358,7 +358,7 @@ def _newname(template="Thread-%d"): # Active thread administration _active_limbo_lock = _allocate_lock() -_active = {} +_active = {} # maps thread id to Thread object _limbo = {} @@ -643,8 +643,9 @@ def _pickSomeNonDaemonThread(): # Dummy thread class to represent threads not started here. -# These aren't garbage collected when they die, -# nor can they be waited for. +# These aren't garbage collected when they die, nor can they be waited for. +# If they invoke anything in threading.py that calls currentThread(), they +# leave an entry in the _active dict forever after. # Their purpose is to return *something* from currentThread(). # They are marked as daemon threads so we won't wait for them # when we exit (conform previous semantics). @@ -653,7 +654,12 @@ class _DummyThread(Thread): def __init__(self): Thread.__init__(self, name=_newname("Dummy-%d")) + + # Thread.__block consumes an OS-level locking primitive, which + # can never be used by a _DummyThread. Since a _DummyThread + # instance is immortal, that's bad, so release this resource. del self._Thread__block + self._Thread__started = True _active_limbo_lock.acquire() _active[_get_ident()] = self |