diff options
author | Victor Stinner <vstinner@python.org> | 2020-03-27 16:50:42 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-27 16:50:42 (GMT) |
commit | d8ff44ce4cd6f3ec0fab5fccda6bf14afcb25c30 (patch) | |
tree | 009d56fe2dac5c1e920771297c9a08eb38d16ef8 /Lib/threading.py | |
parent | 5a58c5280b8df4ca5d6a19892b24fff96e9ea868 (diff) | |
download | cpython-d8ff44ce4cd6f3ec0fab5fccda6bf14afcb25c30.zip cpython-d8ff44ce4cd6f3ec0fab5fccda6bf14afcb25c30.tar.gz cpython-d8ff44ce4cd6f3ec0fab5fccda6bf14afcb25c30.tar.bz2 |
bpo-40089: Fix threading._after_fork() (GH-19191)
If fork was not called by a thread spawned by threading.Thread,
threading._after_fork() now creates a _MainThread instance for
_main_thread, instead of a _DummyThread instance.
Diffstat (limited to 'Lib/threading.py')
-rw-r--r-- | Lib/threading.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/Lib/threading.py b/Lib/threading.py index 5932367..46eb1b9 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -1423,7 +1423,15 @@ def _after_fork(): # fork() only copied the current thread; clear references to others. new_active = {} - current = current_thread() + + try: + current = _active[get_ident()] + except KeyError: + # fork() was called in a thread which was not spawned + # by threading.Thread. For example, a thread spawned + # by thread.start_new_thread(). + current = _MainThread() + _main_thread = current # reset _shutdown() locks: threads re-register their _tstate_lock below |