]> granicus.if.org Git - python/commit
bpo-32777: Fix _Py_set_inheritable async-safety in subprocess (GH-5560) (GH-5563)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 6 Feb 2018 06:51:10 +0000 (22:51 -0800)
committerGregory P. Smith <greg@krypto.org>
Tue, 6 Feb 2018 06:51:10 +0000 (22:51 -0800)
commitb90c68586e1f2c45c736dd38880f182be267e2ef
tree6763f3110e2bbc097729adccc355a8d252a3d0e6
parent7bd5a75bbe28219d3fc18a239c2c554d1850abcb
bpo-32777: Fix _Py_set_inheritable async-safety in subprocess (GH-5560) (GH-5563)

Fix a rare but potential pre-exec child process deadlock in subprocess on POSIX systems when marking file descriptors inheritable on exec in the child process.  This bug appears to have been introduced in 3.4 with the inheritable file descriptors support.

This also changes Python/fileutils.c `set_inheritable` to use the "slow" two `fcntl` syscall path instead of the "fast" single `ioctl` syscall path when asked to be async signal safe (by way of being asked not to raise exceptions).  `ioctl` is not a POSIX async-signal-safe approved function.

ref: http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html
(cherry picked from commit c1e46e94de38a92f98736af9a42d89c3975a9919)

Co-authored-by: Alexey Izbyshev <izbyshev@users.noreply.github.com>
Include/fileutils.h
Misc/NEWS.d/next/Library/2018-02-05-21-28-28.bpo-32777.C-wIXF.rst [new file with mode: 0644]
Modules/_posixsubprocess.c
Python/fileutils.c