mirror of
https://github.com/python/cpython.git
synced 2025-12-04 00:30:19 +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
|
|
@ -399,17 +399,19 @@ class BaseSelectorTestCase(unittest.TestCase):
|
|||
|
||||
orig_alrm_handler = signal.signal(signal.SIGALRM, handler)
|
||||
self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler)
|
||||
self.addCleanup(signal.alarm, 0)
|
||||
|
||||
signal.alarm(1)
|
||||
try:
|
||||
signal.alarm(1)
|
||||
|
||||
s.register(rd, selectors.EVENT_READ)
|
||||
t = time()
|
||||
# select() is interrupted by a signal which raises an exception
|
||||
with self.assertRaises(InterruptSelect):
|
||||
s.select(30)
|
||||
# select() was interrupted before the timeout of 30 seconds
|
||||
self.assertLess(time() - t, 5.0)
|
||||
s.register(rd, selectors.EVENT_READ)
|
||||
t = time()
|
||||
# select() is interrupted by a signal which raises an exception
|
||||
with self.assertRaises(InterruptSelect):
|
||||
s.select(30)
|
||||
# select() was interrupted before the timeout of 30 seconds
|
||||
self.assertLess(time() - t, 5.0)
|
||||
finally:
|
||||
signal.alarm(0)
|
||||
|
||||
@unittest.skipUnless(hasattr(signal, "alarm"),
|
||||
"signal.alarm() required for this test")
|
||||
|
|
@ -421,17 +423,19 @@ class BaseSelectorTestCase(unittest.TestCase):
|
|||
|
||||
orig_alrm_handler = signal.signal(signal.SIGALRM, lambda *args: None)
|
||||
self.addCleanup(signal.signal, signal.SIGALRM, orig_alrm_handler)
|
||||
self.addCleanup(signal.alarm, 0)
|
||||
|
||||
signal.alarm(1)
|
||||
try:
|
||||
signal.alarm(1)
|
||||
|
||||
s.register(rd, selectors.EVENT_READ)
|
||||
t = time()
|
||||
# select() is interrupted by a signal, but the signal handler doesn't
|
||||
# raise an exception, so select() should by retries with a recomputed
|
||||
# timeout
|
||||
self.assertFalse(s.select(1.5))
|
||||
self.assertGreaterEqual(time() - t, 1.0)
|
||||
s.register(rd, selectors.EVENT_READ)
|
||||
t = time()
|
||||
# select() is interrupted by a signal, but the signal handler doesn't
|
||||
# raise an exception, so select() should by retries with a recomputed
|
||||
# timeout
|
||||
self.assertFalse(s.select(1.5))
|
||||
self.assertGreaterEqual(time() - t, 1.0)
|
||||
finally:
|
||||
signal.alarm(0)
|
||||
|
||||
|
||||
class ScalableSelectorMixIn:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue