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.
This commit is contained in:
parent
5a58c5280b
commit
d8ff44ce4c
|
@ -1423,7 +1423,15 @@ def _after_fork():
|
||||||
|
|
||||||
# fork() only copied the current thread; clear references to others.
|
# fork() only copied the current thread; clear references to others.
|
||||||
new_active = {}
|
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
|
_main_thread = current
|
||||||
|
|
||||||
# reset _shutdown() locks: threads re-register their _tstate_lock below
|
# reset _shutdown() locks: threads re-register their _tstate_lock below
|
||||||
|
|
|
@ -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.
|
Loading…
Reference in New Issue