Skip to content

Commit 0bf7b2e

Browse files
gh-139759: Test forking with an unclosed subinterpreter
Port the regression test from #145545. Wait for the child during cleanup to avoid leaving a zombie process. Co-authored-by: Aurel Wildfellner <201101774+aurelwildfellner@users.noreply.github.com>
1 parent 4aa86a0 commit 0bf7b2e

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

‎Lib/test/test_interpreters/test_stress.py‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import os
12
import threading
23
import unittest
34

45
from test import support
56
from test.support import import_helper
67
from test.support import threading_helper
8+
from test.support import warnings_helper
79
# Raise SkipTest if subinterpreters not supported.
810
_interpreters = import_helper.import_module('_interpreters')
911
from concurrent import interpreters
@@ -82,6 +84,26 @@ def test_create_interpreter_no_memory(self):
8284
with support.inject_memory_error_cm(0, 1):
8385
_interpreters.create()
8486

87+
@warnings_helper.ignore_fork_in_thread_deprecation_warnings()
88+
@support.requires_fork()
89+
def test_unclosed_interpreter_on_fork(self):
90+
interp = interpreters.create()
91+
interp.exec("pass")
92+
93+
fds = os.pipe()
94+
pid = os.fork()
95+
96+
if pid == 0:
97+
os.close(fds[0])
98+
os.write(fds[1], b"OK")
99+
os._exit(0)
100+
else:
101+
os.close(fds[1])
102+
self.addCleanup(os.close, fds[0])
103+
self.addCleanup(support.wait_process, pid, exitcode=0)
104+
value = os.read(fds[0], 100)
105+
self.assertEqual(value, b"OK")
106+
85107

86108
if __name__ == '__main__':
87109
# Test needs to be a package, so we can do relative imports.

0 commit comments

Comments
 (0)