Skip to content

Commit c7e1c9a

Browse files
committed
properly clean up after using SIGALRM signal in tests
1 parent a6253b6 commit c7e1c9a

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

test/framework/run.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -206,22 +206,25 @@ def test_run_cmd_negative_exit_code(self):
206206
def handler(signum, _):
207207
raise RuntimeError("Signal handler called with signal %s" % signum)
208208

209-
# set the signal handler and a 3-second alarm
210-
signal.signal(signal.SIGALRM, handler)
211-
signal.alarm(3)
209+
try:
210+
# set the signal handler and a 3-second alarm
211+
signal.signal(signal.SIGALRM, handler)
212+
signal.alarm(3)
212213

213-
(_, ec) = run_cmd("kill -9 $$", log_ok=False)
214-
self.assertEqual(ec, -9)
214+
(_, ec) = run_cmd("kill -9 $$", log_ok=False)
215+
self.assertEqual(ec, -9)
215216

216-
# reset the alarm
217-
signal.alarm(0)
218-
signal.alarm(3)
217+
# reset the alarm
218+
signal.alarm(0)
219+
signal.alarm(3)
219220

220-
(_, ec) = run_cmd_qa("kill -9 $$", {}, log_ok=False)
221-
self.assertEqual(ec, -9)
221+
(_, ec) = run_cmd_qa("kill -9 $$", {}, log_ok=False)
222+
self.assertEqual(ec, -9)
222223

223-
# disable the alarm
224-
signal.alarm(0)
224+
finally:
225+
# cleanup: disable the alarm + reset signal handler for SIGALRM
226+
signal.signal(signal.SIGALRM, signal.SIG_DFL)
227+
signal.alarm(0)
225228

226229
def test_run_cmd_bis(self):
227230
"""More 'complex' test for run_cmd function."""

test/framework/toy_build.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2758,7 +2758,8 @@ def __enter__(self):
27582758
signal.alarm(self.seconds)
27592759

27602760
def __exit__(self, type, value, traceback):
2761-
# cancel scheduled alarm (just for cleanup sake)
2761+
# clean up SIGALRM signal handler, and cancel scheduled alarm
2762+
signal.signal(signal.SIGALRM, signal.SIG_DFL)
27622763
signal.alarm(0)
27632764

27642765
# wait for lock to be removed, with 1 second interval of checking;
@@ -2871,7 +2872,8 @@ def __enter__(self):
28712872
signal.alarm(self.seconds)
28722873

28732874
def __exit__(self, type, value, traceback):
2874-
# cancel scheduled alarm (just for cleanup sake)
2875+
# clean up SIGALRM signal handler, and cancel scheduled alarm
2876+
signal.signal(signal.SIGALRM, signal.SIG_DFL)
28752877
signal.alarm(0)
28762878

28772879
# add extra sleep command to ensure session takes long enough

0 commit comments

Comments
 (0)