bpo-47151: Fallback to fork when vfork fails in subprocess. (GH-32186)

bpo-47151: Fallback to fork when vfork fails in subprocess. An OS kernel can specifically decide to disallow vfork() in a process. No need for that to prevent us from launching subprocesses.
This commit is contained in:
Gregory P. Smith 2022-03-31 13:42:28 -07:00 committed by GitHub
parent e7bb7c2f04
commit 4a08c4c469
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 0 deletions

View File

@ -0,0 +1,3 @@
When subprocess tries to use vfork, it now falls back to fork if vfork
returns an error. This allows use in situations where vfork isn't allowed
by the OS kernel.

View File

@ -685,6 +685,12 @@ do_fork_exec(char *const exec_array[],
assert(preexec_fn == Py_None);
pid = vfork();
if (pid == -1) {
/* If vfork() fails, fall back to using fork(). When it isn't
* allowed in a process by the kernel, vfork can return -1
* with errno EINVAL. https://bugs.python.org/issue47151. */
pid = fork();
}
} else
#endif
{