mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
gh-104690 Disallow thread creation and fork at interpreter finalization (#104826)
Disallow thread creation and fork at interpreter finalization. in the following functions, check if interpreter is finalizing and raise `RuntimeError` with appropriate message: * `_thread.start_new_thread` and thus `threading` * `posix.fork` * `posix.fork1` * `posix.forkpty` * `_posixsubprocess.fork_exec` when a `preexec_fn=` is supplied. --------- Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Gregory P. Smith <greg@krypto.org>
This commit is contained in:
parent
eaff9c39aa
commit
ce558e69d4
8 changed files with 97 additions and 30 deletions
|
|
@ -5,6 +5,7 @@ from test.support import check_sanitizer
|
|||
from test.support import import_helper
|
||||
from test.support import os_helper
|
||||
from test.support import warnings_helper
|
||||
from test.support.script_helper import assert_python_ok
|
||||
import subprocess
|
||||
import sys
|
||||
import signal
|
||||
|
|
@ -3329,6 +3330,24 @@ class POSIXProcessTestCase(BaseTestCase):
|
|||
except subprocess.TimeoutExpired:
|
||||
pass
|
||||
|
||||
def test_preexec_at_exit(self):
|
||||
code = f"""if 1:
|
||||
import atexit
|
||||
import subprocess
|
||||
|
||||
def dummy():
|
||||
pass
|
||||
|
||||
def exit_handler():
|
||||
subprocess.Popen({ZERO_RETURN_CMD}, preexec_fn=dummy)
|
||||
print("shouldn't be printed")
|
||||
|
||||
atexit.register(exit_handler)
|
||||
"""
|
||||
_, out, err = assert_python_ok("-c", code)
|
||||
self.assertEqual(out, b'')
|
||||
self.assertIn(b"preexec_fn not supported at interpreter shutdown", err)
|
||||
|
||||
|
||||
@unittest.skipUnless(mswindows, "Windows specific tests")
|
||||
class Win32ProcessTestCase(BaseTestCase):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue