mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
bpo-31479: Always reset the signal alarm in tests (#3588)
* bpo-31479: Always reset the signal alarm in tests Use "try: ... finally: signal.signal(0)" pattern to make sure that tests don't "leak" a pending fatal signal alarm. * Move two more alarm() calls into the try block Fix also typo: replace signal.signal(0) with signal.alarm(0) * Move another signal.alarm() into the try block
This commit is contained in:
parent
a92941ff12
commit
9abee722d4
6 changed files with 56 additions and 40 deletions
|
@ -3854,7 +3854,6 @@ class InterruptedTimeoutBase(unittest.TestCase):
|
|||
orig_alrm_handler = signal.signal(signal.SIGALRM,
|
||||
lambda signum, frame: 1 / 0)
|
||||
self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler)
|
||||
self.addCleanup(self.setAlarm, 0)
|
||||
|
||||
# Timeout for socket operations
|
||||
timeout = 4.0
|
||||
|
@ -3891,9 +3890,12 @@ class InterruptedRecvTimeoutTest(InterruptedTimeoutBase, UDPTestBase):
|
|||
def checkInterruptedRecv(self, func, *args, **kwargs):
|
||||
# Check that func(*args, **kwargs) raises
|
||||
# errno of EINTR when interrupted by a signal.
|
||||
self.setAlarm(self.alarm_time)
|
||||
with self.assertRaises(ZeroDivisionError) as cm:
|
||||
func(*args, **kwargs)
|
||||
try:
|
||||
self.setAlarm(self.alarm_time)
|
||||
with self.assertRaises(ZeroDivisionError) as cm:
|
||||
func(*args, **kwargs)
|
||||
finally:
|
||||
self.setAlarm(0)
|
||||
|
||||
def testInterruptedRecvTimeout(self):
|
||||
self.checkInterruptedRecv(self.serv.recv, 1024)
|
||||
|
@ -3948,10 +3950,13 @@ class InterruptedSendTimeoutTest(InterruptedTimeoutBase,
|
|||
# Check that func(*args, **kwargs), run in a loop, raises
|
||||
# OSError with an errno of EINTR when interrupted by a
|
||||
# signal.
|
||||
with self.assertRaises(ZeroDivisionError) as cm:
|
||||
while True:
|
||||
self.setAlarm(self.alarm_time)
|
||||
func(*args, **kwargs)
|
||||
try:
|
||||
with self.assertRaises(ZeroDivisionError) as cm:
|
||||
while True:
|
||||
self.setAlarm(self.alarm_time)
|
||||
func(*args, **kwargs)
|
||||
finally:
|
||||
self.setAlarm(0)
|
||||
|
||||
# Issue #12958: The following tests have problems on OS X prior to 10.7
|
||||
@support.requires_mac_ver(10, 7)
|
||||
|
@ -4675,8 +4680,8 @@ class TCPTimeoutTest(SocketTCPTest):
|
|||
raise Alarm
|
||||
old_alarm = signal.signal(signal.SIGALRM, alarm_handler)
|
||||
try:
|
||||
signal.alarm(2) # POSIX allows alarm to be up to 1 second early
|
||||
try:
|
||||
signal.alarm(2) # POSIX allows alarm to be up to 1 second early
|
||||
foo = self.serv.accept()
|
||||
except socket.timeout:
|
||||
self.fail("caught timeout instead of Alarm")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue