diff options
author | Christian Heimes <christian@python.org> | 2019-08-27 21:36:56 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-27 21:36:56 (GMT) |
commit | 98d90f745d35d5d07bffcb46788b50e05eea56c6 (patch) | |
tree | ef3fd981f4f82f06e73b014bc742cf7a5acfebd9 | |
parent | 3224e1a6bb23b1b322f5b9424b10ab68c9127dcc (diff) | |
download | cpython-98d90f745d35d5d07bffcb46788b50e05eea56c6.zip cpython-98d90f745d35d5d07bffcb46788b50e05eea56c6.tar.gz cpython-98d90f745d35d5d07bffcb46788b50e05eea56c6.tar.bz2 |
bpo-37951: Lift subprocess's fork() restriction (GH-15544)
-rw-r--r-- | Doc/library/subprocess.rst | 7 | ||||
-rw-r--r-- | Doc/whatsnew/3.8.rst | 6 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-08-27-10-03-48.bpo-37951.MfRQgL.rst | 2 | ||||
-rw-r--r-- | Modules/_posixsubprocess.c | 6 |
4 files changed, 19 insertions, 2 deletions
diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst index 7e1e3f9..167ed9a 100644 --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -483,6 +483,13 @@ functions. The *start_new_session* parameter can take the place of a previously common use of *preexec_fn* to call os.setsid() in the child. + .. versionchanged:: 3.8 + + The *preexec_fn* parameter is no longer supported in subinterpreters. + The use of the parameter in a subinterpreter raises + :exc:`RuntimeError`. The new restriction may affect applications that + are deployed in mod_wsgi, uWSGI, and other embedded environments. + If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` and :const:`2` will be closed before the child process is executed. Otherwise when *close_fds* is false, file descriptors obey their inheritable flag diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index cd31cf6..bcdb60d 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -1531,6 +1531,12 @@ Changes in the Python API non-zero :attr:`~Popen.returncode`. (Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.) +* The *preexec_fn* argument of * :class:`subprocess.Popen` is no longer + compatible with subinterpreters. The use of the parameter in a + subinterpreter now raises :exc:`RuntimeError`. + (Contributed by Eric Snow in :issue:`34651`, modified by Christian Heimes + in :issue:`37951`.) + * The :meth:`imap.IMAP4.logout` method no longer ignores silently arbitrary exceptions. diff --git a/Misc/NEWS.d/next/Library/2019-08-27-10-03-48.bpo-37951.MfRQgL.rst b/Misc/NEWS.d/next/Library/2019-08-27-10-03-48.bpo-37951.MfRQgL.rst new file mode 100644 index 0000000..18e4c62 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-08-27-10-03-48.bpo-37951.MfRQgL.rst @@ -0,0 +1,2 @@ +Most features of the subprocess module now work again in subinterpreters. +Only *preexec_fn* is restricted in subinterpreters. diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 60c8eab..f68d362 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -583,8 +583,10 @@ subprocess_fork_exec(PyObject* self, PyObject *args) &restore_signals, &call_setsid, &preexec_fn)) return NULL; - if (_PyInterpreterState_Get() != PyInterpreterState_Main()) { - PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters"); + if ((preexec_fn != Py_None) && + (_PyInterpreterState_Get() != PyInterpreterState_Main())) { + PyErr_SetString(PyExc_RuntimeError, + "preexec_fn not supported within subinterpreters"); return NULL; } |