mirror of https://github.com/python/cpython.git
[3.13] gh-132542: Set native thread ID after fork (GH-132701) (GH-134361)
(cherry picked from commit 6b73502313
)
This commit is contained in:
parent
bad9f63f6c
commit
aebbbaffe8
|
@ -1208,6 +1208,34 @@ def f():
|
|||
self.assertEqual(err, b'')
|
||||
|
||||
|
||||
@skip_unless_reliable_fork
|
||||
def test_native_id_after_fork(self):
|
||||
script = """if True:
|
||||
import threading
|
||||
import os
|
||||
from test import support
|
||||
|
||||
parent_thread_native_id = threading.current_thread().native_id
|
||||
print(parent_thread_native_id, flush=True)
|
||||
assert parent_thread_native_id == threading.get_native_id()
|
||||
childpid = os.fork()
|
||||
if childpid == 0:
|
||||
print(threading.current_thread().native_id, flush=True)
|
||||
assert threading.current_thread().native_id == threading.get_native_id()
|
||||
else:
|
||||
try:
|
||||
assert parent_thread_native_id == threading.current_thread().native_id
|
||||
assert parent_thread_native_id == threading.get_native_id()
|
||||
finally:
|
||||
support.wait_process(childpid, exitcode=0)
|
||||
"""
|
||||
rc, out, err = assert_python_ok('-c', script)
|
||||
self.assertEqual(rc, 0)
|
||||
self.assertEqual(err, b"")
|
||||
native_ids = out.strip().splitlines()
|
||||
self.assertEqual(len(native_ids), 2)
|
||||
self.assertNotEqual(native_ids[0], native_ids[1])
|
||||
|
||||
class ThreadJoinOnShutdown(BaseTestCase):
|
||||
|
||||
def _run_and_join(self, script):
|
||||
|
|
|
@ -932,6 +932,8 @@ def _after_fork(self, new_ident=None):
|
|||
# This thread is alive.
|
||||
self._ident = new_ident
|
||||
assert self._handle.ident == new_ident
|
||||
if _HAVE_THREAD_NATIVE_ID:
|
||||
self._set_native_id()
|
||||
else:
|
||||
# Otherwise, the thread is dead, Jim. _PyThread_AfterFork()
|
||||
# already marked our handle done.
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Update :attr:`Thread.native_id <threading.Thread.native_id>` after
|
||||
:manpage:`fork(2)` to ensure accuracy. Patch by Noam Cohen.
|
Loading…
Reference in New Issue