]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #26870: Close pty master in case of exception
authorMartin Panter <vadmium+py@gmail.com>
Sun, 15 May 2016 03:05:36 +0000 (03:05 +0000)
committerMartin Panter <vadmium+py@gmail.com>
Sun, 15 May 2016 03:05:36 +0000 (03:05 +0000)
Lib/test/test_readline.py

index 84fd119e6a165488d871e7b0ade13da41394419a..372b0554f952978fd8403313fe54f5e948f38771 100644 (file)
@@ -1,6 +1,7 @@
 """
 Very minimal unittests for parts of the readline module.
 """
+from contextlib import ExitStack
 from errno import EIO
 import os
 import selectors
@@ -123,7 +124,10 @@ def run_pty(script, input=b"dummy input\r"):
     args = (sys.executable, '-c', script)
     proc = subprocess.Popen(args, stdin=slave, stdout=slave, stderr=slave)
     os.close(slave)
-    with proc, selectors.DefaultSelector() as sel:
+    with ExitStack() as cleanup:
+        cleanup.enter_context(proc)
+        cleanup.callback(os.close, master)
+        sel = cleanup.enter_context(selectors.DefaultSelector())
         sel.register(master, selectors.EVENT_READ | selectors.EVENT_WRITE)
         os.set_blocking(master, False)
         while True:
@@ -137,7 +141,6 @@ def run_pty(script, input=b"dummy input\r"):
                             raise
                         chunk = b""
                     if not chunk:
-                        os.close(master)
                         return output
                     output.extend(chunk)
                 if events & selectors.EVENT_WRITE: