]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-142195: Fixed Popen.communicate indefinite loops (GH-143203) (#143256)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 28 Dec 2025 17:20:40 +0000 (18:20 +0100)
committerGitHub <noreply@github.com>
Sun, 28 Dec 2025 17:20:40 +0000 (17:20 +0000)
gh-142195: Fixed Popen.communicate indefinite loops (GH-143203)

Changed condition to evaluate if timeout is less than or equals to 0. This is needed for simulated time environments such as Shadow where the time will match exactly on the boundary.

---------
(cherry picked from commit fa9a4254e81c0abcc3345021c45aaf5f788f9ea9)

Co-authored-by: Prithviraj Chaudhuri <p.chaudhuri1993@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Lib/subprocess.py
Misc/NEWS.d/next/Library/2025-12-27-00-14-56.gh-issue-142195.UgBEo5.rst [new file with mode: 0644]

index 885f0092b531132d0f77e656f1e1a88fb8e4d6ef..3a8c7434d37b1a55ad7ace658fd7bf6f8a1faf0b 100644 (file)
@@ -2143,7 +2143,7 @@ class Popen:
 
                 while selector.get_map():
                     timeout = self._remaining_time(endtime)
-                    if timeout is not None and timeout < 0:
+                    if timeout is not None and timeout <= 0:
                         self._check_timeout(endtime, orig_timeout,
                                             stdout, stderr,
                                             skip_check_and_raise=True)
diff --git a/Misc/NEWS.d/next/Library/2025-12-27-00-14-56.gh-issue-142195.UgBEo5.rst b/Misc/NEWS.d/next/Library/2025-12-27-00-14-56.gh-issue-142195.UgBEo5.rst
new file mode 100644 (file)
index 0000000..b2b1ffe
--- /dev/null
@@ -0,0 +1 @@
+Updated timeout evaluation logic in :mod:`subprocess` to be compatible with deterministic environments like Shadow where time moves exactly as requested.