From: Victor Stinner Date: Fri, 27 Mar 2020 16:50:42 +0000 (+0100) Subject: bpo-40089: Fix threading._after_fork() (GH-19191) X-Git-Tag: v3.9.0a6~258 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d8ff44ce4cd6f3ec0fab5fccda6bf14afcb25c30;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Lib/threading.py b/Lib/threading.py index 59323679c80d..46eb1b918a9a 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 diff --git a/Misc/NEWS.d/next/Library/2020-03-27-17-22-34.bpo-40089.-lFsD0.rst b/Misc/NEWS.d/next/Library/2020-03-27-17-22-34.bpo-40089.-lFsD0.rst new file mode 100644 index 000000000000..f5335a33c066 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-03-27-17-22-34.bpo-40089.-lFsD0.rst @@ -0,0 +1,3 @@ +Fix threading._after_fork(): 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.