https://github.com/python/cpython/commit/f7b24ffefda839f367b048c06879df6bded128a1
commit: f7b24ffefda839f367b048c06879df6bded128a1
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2025-04-14T09:15:12+03:00
summary:
gh-124986: Fix test_no_leaking in test_subprocess on NetBSD and FreeBSD
(GH-132476)
On platforms where the file descriptor limit is larger than FD_SETSIZE
that test was always skipped (FreeBSD) or always failing (NetBSD).
files:
M Lib/test/test_subprocess.py
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 81d97a88f07bdd..3cb755cd56cac8 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -41,6 +41,10 @@
import grp
except ImportError:
grp = None
+try:
+ import resource
+except ImportError:
+ resource = None
try:
import fcntl
@@ -1211,6 +1215,16 @@ def test_no_leaking(self):
max_handles = 1026 # too much for most UNIX systems
else:
max_handles = 2050 # too much for (at least some) Windows setups
+ if resource:
+ # And if it is not too much, try to make it too much.
+ try:
+ soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
+ if soft > 1024:
+ resource.setrlimit(resource.RLIMIT_NOFILE, (1024, hard))
+ self.addCleanup(resource.setrlimit, resource.RLIMIT_NOFILE,
+ (soft, hard))
+ except (OSError, ValueError):
+ pass
handles = []
tmpdir = tempfile.mkdtemp()
try:
@@ -1225,7 +1239,9 @@ def test_no_leaking(self):
else:
self.skipTest("failed to reach the file descriptor limit "
"(tried %d)" % max_handles)
- # Close a couple of them (should be enough for a subprocess)
+ # Close a couple of them (should be enough for a subprocess).
+ # Close lower file descriptors, so select() will work.
+ handles.reverse()
for i in range(10):
os.close(handles.pop())
# Loop creating some subprocesses. If one of them leaks some fds,
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]