bpo-38547: Fix test_pty if the process is the session leader (GH-17519)
Fix test_pty: if the process is the session leader, closing the
master file descriptor raises a SIGHUP signal: simply ignore SIGHUP
when running the tests.
(cherry picked from commit a1838ec259
)
Co-authored-by: Victor Stinner <vstinner@python.org>
This commit is contained in:
parent
4594565b56
commit
d08fd298dc
|
@ -66,16 +66,27 @@ def _readline(fd):
|
|||
# XXX(nnorwitz): these tests leak fds when there is an error.
|
||||
class PtyTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
# isatty() and close() can hang on some platforms. Set an alarm
|
||||
# before running the test to make sure we don't hang forever.
|
||||
old_alarm = signal.signal(signal.SIGALRM, self.handle_sig)
|
||||
self.addCleanup(signal.signal, signal.SIGALRM, old_alarm)
|
||||
|
||||
old_sighup = signal.signal(signal.SIGHUP, self.handle_sighup)
|
||||
self.addCleanup(signal.signal, signal.SIGHUP, old_alarm)
|
||||
|
||||
# isatty() and close() can hang on some platforms. Set an alarm
|
||||
# before running the test to make sure we don't hang forever.
|
||||
self.addCleanup(signal.alarm, 0)
|
||||
signal.alarm(10)
|
||||
|
||||
def handle_sig(self, sig, frame):
|
||||
self.fail("isatty hung")
|
||||
|
||||
@staticmethod
|
||||
def handle_sighup(sig, frame):
|
||||
# if the process is the session leader, os.close(master_fd)
|
||||
# of "master_fd, slave_name = pty.master_open()" raises SIGHUP
|
||||
# signal: just ignore the signal.
|
||||
pass
|
||||
|
||||
def test_basic(self):
|
||||
try:
|
||||
debug("Calling master_open()")
|
||||
|
@ -122,9 +133,11 @@ class PtyTest(unittest.TestCase):
|
|||
self.assertEqual(b'For my pet fish, Eric.\n', normalize_output(s2))
|
||||
|
||||
os.close(slave_fd)
|
||||
# closing master_fd can raise a SIGHUP if the process is
|
||||
# the session leader: we installed a SIGHUP signal handler
|
||||
# to ignore this signal.
|
||||
os.close(master_fd)
|
||||
|
||||
|
||||
def test_fork(self):
|
||||
debug("calling pty.fork()")
|
||||
pid, master_fd = pty.fork()
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Fix test_pty: if the process is the session leader, closing the master file
|
||||
descriptor raises a SIGHUP signal: simply ignore SIGHUP when running the
|
||||
tests.
|
Loading…
Reference in New Issue