bpo-31160: Fix race condition in test_os.PtyTests (GH-19263) · python/cpython@16d7567

@@ -1846,6 +1846,7 @@ def run_child(self, child, terminal_input):

18461846

os.close(w)

18471847

self.skipTest("pty.fork() raised {}".format(e))

18481848

raise

1849+18491850

if pid == 0:

18501851

# Child

18511852

try:

@@ -1859,9 +1860,11 @@ def run_child(self, child, terminal_input):

18591860

finally:

18601861

# We don't want to return to unittest...

18611862

os._exit(0)

1863+18621864

# Parent

18631865

os.close(w)

18641866

os.write(fd, terminal_input)

1867+18651868

# Get results from the pipe

18661869

with open(r, "r") as rpipe:

18671870

lines = []

@@ -1871,6 +1874,7 @@ def run_child(self, child, terminal_input):

18711874

# The other end was closed => the child exited

18721875

break

18731876

lines.append(line)

1877+18741878

# Check the result was got and corresponds to the user's terminal input

18751879

if len(lines) != 2:

18761880

# Something went wrong, try to get at stderr

@@ -1888,11 +1892,14 @@ def run_child(self, child, terminal_input):

18881892

child_output = child_output.decode("ascii", "ignore")

18891893

self.fail("got %d lines in pipe but expected 2, child output was:\n%s"

18901894

% (len(lines), child_output))

1891-

os.close(fd)

189218951893-

# Wait until the child process completes

1896+

# Wait until the child process completes before closing the PTY to

1897+

# prevent sending SIGHUP to the child process.

18941898

support.wait_process(pid, exitcode=0)

189518991900+

# Close the PTY

1901+

os.close(fd)

1902+18961903

return lines

1897190418981905

def check_input_tty(self, prompt, terminal_input, stdio_encoding=None):