From: Martin Panter Date: Sun, 15 May 2016 03:05:36 +0000 (+0000) Subject: Issue #26870: Close pty master in case of exception X-Git-Tag: v3.6.0a1~22 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3712686956b2bf9e3c98f394a1a27f99fafdbaa8;p=thirdparty%2FPython%2Fcpython.git Issue #26870: Close pty master in case of exception --- diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py index 84fd119e6a16..372b0554f952 100644 --- a/Lib/test/test_readline.py +++ b/Lib/test/test_readline.py @@ -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: