summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2019-08-27 21:36:56 (GMT)
committerGitHub <noreply@github.com>2019-08-27 21:36:56 (GMT)
commit98d90f745d35d5d07bffcb46788b50e05eea56c6 (patch)
treeef3fd981f4f82f06e73b014bc742cf7a5acfebd9
parent3224e1a6bb23b1b322f5b9424b10ab68c9127dcc (diff)
downloadcpython-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.rst7
-rw-r--r--Doc/whatsnew/3.8.rst6
-rw-r--r--Misc/NEWS.d/next/Library/2019-08-27-10-03-48.bpo-37951.MfRQgL.rst2
-rw-r--r--Modules/_posixsubprocess.c6
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;
}