Skip to content

Commit adb54e6

Browse files
do not leak blocked signals out of unit test
1 parent 82d49e3 commit adb54e6

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

Lib/test/_test_multiprocessing.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6044,21 +6044,27 @@ def test_resource_tracker_exit_code(self):
60446044
self._test_resource_tracker_leak_resources(
60456045
cleanup=cleanup,
60466046
)
6047+
60476048
@unittest.skipUnless(hasattr(signal, "pthread_sigmask"), "pthread_sigmask is not available")
60486049
def test_resource_tracker_blocked_signals(self):
60496050
#
60506051
# gh-127586: Check that resource_tracker does not override blocked signals of caller.
60516052
#
60526053
from multiprocessing.resource_tracker import ResourceTracker
6054+
orig_sigmask = signal.pthread_sigmask(signal.SIG_BLOCK, set())
60536055
signals = {signal.SIGTERM, signal.SIGINT, signal.SIGUSR1}
60546056

6055-
for sig in signals:
6056-
signal.pthread_sigmask(signal.SIG_SETMASK, {sig})
6057-
self.assertEqual(signal.pthread_sigmask(signal.SIG_BLOCK, set()), {sig})
6058-
tracker = ResourceTracker()
6059-
tracker.ensure_running()
6060-
self.assertEqual(signal.pthread_sigmask(signal.SIG_BLOCK, set()), {sig})
6061-
tracker._stop()
6057+
try:
6058+
for sig in signals:
6059+
signal.pthread_sigmask(signal.SIG_SETMASK, {sig})
6060+
self.assertEqual(signal.pthread_sigmask(signal.SIG_BLOCK, set()), {sig})
6061+
tracker = ResourceTracker()
6062+
tracker.ensure_running()
6063+
self.assertEqual(signal.pthread_sigmask(signal.SIG_BLOCK, set()), {sig})
6064+
tracker._stop()
6065+
finally:
6066+
# restore sigmask to what it was before executing test
6067+
signal.pthread_sigmask(signal.SIG_SETMASK, orig_sigmask)
60626068

60636069
class TestSimpleQueue(unittest.TestCase):
60646070

0 commit comments

Comments
 (0)