Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0b69fbc

Browse files
author
Guido van Rossum
committed
asyncio: Add close() back to Unix selector event loop, to remove all signal handlers. Should fix buildbot issues.
1 parent 79ed4c7 commit 0b69fbc

2 files changed

Lines changed: 21 additions & 0 deletions

File tree

Lib/asyncio/unix_events.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ def __init__(self, selector=None):
4848
def _socketpair(self):
4949
return socket.socketpair()
5050

51+
def close(self):
52+
for sig in list(self._signal_handlers):
53+
self.remove_signal_handler(sig)
54+
super().close()
55+
5156
def add_signal_handler(self, sig, callback, *args):
5257
"""Add a handler for a signal. UNIX only.
5358

Lib/test/test_asyncio/test_unix_events.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,22 @@ class Err(OSError):
183183
self.assertRaises(
184184
RuntimeError, self.loop.remove_signal_handler, signal.SIGHUP)
185185

186+
@unittest.mock.patch('asyncio.unix_events.signal')
187+
def test_close(self, m_signal):
188+
m_signal.NSIG = signal.NSIG
189+
190+
self.loop.add_signal_handler(signal.SIGHUP, lambda: True)
191+
self.loop.add_signal_handler(signal.SIGCHLD, lambda: True)
192+
193+
self.assertEqual(len(self.loop._signal_handlers), 2)
194+
195+
m_signal.set_wakeup_fd.reset_mock()
196+
197+
self.loop.close()
198+
199+
self.assertEqual(len(self.loop._signal_handlers), 0)
200+
m_signal.set_wakeup_fd.assert_called_once_with(-1)
201+
186202

187203
class UnixReadPipeTransportTests(unittest.TestCase):
188204

0 commit comments

Comments
 (0)