summaryrefslogtreecommitdiffstats
path: root/Lib/multiprocessing/forkserver.py
diff options
context:
space:
mode:
authorAntoine Pitrou <pitrou@free.fr>2017-07-22 11:22:54 (GMT)
committerGitHub <noreply@github.com>2017-07-22 11:22:54 (GMT)
commit896145d9d266ee2758cfcd7691238cbc1f9e1ab8 (patch)
tree3b36a7020108c7305a478e174d8a73cdd6deb540 /Lib/multiprocessing/forkserver.py
parent616ecf18f3aacbd8d172e01673877b22fe946e54 (diff)
downloadcpython-896145d9d266ee2758cfcd7691238cbc1f9e1ab8.zip
cpython-896145d9d266ee2758cfcd7691238cbc1f9e1ab8.tar.gz
cpython-896145d9d266ee2758cfcd7691238cbc1f9e1ab8.tar.bz2
bpo-26732: fix too many fds in processes started with the "forkserver" method (#2813)
* bpo-26732: fix too many fds in processes started with the "forkserver" method A child process would inherit as many fds as the number of still-running children. * Add blurb and test comment
Diffstat (limited to 'Lib/multiprocessing/forkserver.py')
-rw-r--r--Lib/multiprocessing/forkserver.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/Lib/multiprocessing/forkserver.py b/Lib/multiprocessing/forkserver.py
index b9f9b9d..69b842a 100644
--- a/Lib/multiprocessing/forkserver.py
+++ b/Lib/multiprocessing/forkserver.py
@@ -236,8 +236,11 @@ def main(listener_fd, alive_r, preload, main_path=None, sys_path=None):
code = 1
try:
listener.close()
+ selector.close()
+ unused_fds = [alive_r, child_w, sig_r, sig_w]
+ unused_fds.extend(pid_to_fd.values())
code = _serve_one(child_r, fds,
- (alive_r, child_w, sig_r, sig_w),
+ unused_fds,
old_handlers)
except Exception:
sys.excepthook(*sys.exc_info())