Kaydet (Commit) 0b69fbc6 authored tarafından Guido van Rossum's avatar Guido van Rossum

asyncio: Add close() back to Unix selector event loop, to remove all signal…

asyncio: Add close() back to Unix selector event loop, to remove all signal handlers. Should fix buildbot issues.
üst 79ed4c74
...@@ -48,6 +48,11 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): ...@@ -48,6 +48,11 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
def _socketpair(self): def _socketpair(self):
return socket.socketpair() return socket.socketpair()
def close(self):
for sig in list(self._signal_handlers):
self.remove_signal_handler(sig)
super().close()
def add_signal_handler(self, sig, callback, *args): def add_signal_handler(self, sig, callback, *args):
"""Add a handler for a signal. UNIX only. """Add a handler for a signal. UNIX only.
......
...@@ -183,6 +183,22 @@ class SelectorEventLoopTests(unittest.TestCase): ...@@ -183,6 +183,22 @@ class SelectorEventLoopTests(unittest.TestCase):
self.assertRaises( self.assertRaises(
RuntimeError, self.loop.remove_signal_handler, signal.SIGHUP) RuntimeError, self.loop.remove_signal_handler, signal.SIGHUP)
@unittest.mock.patch('asyncio.unix_events.signal')
def test_close(self, m_signal):
m_signal.NSIG = signal.NSIG
self.loop.add_signal_handler(signal.SIGHUP, lambda: True)
self.loop.add_signal_handler(signal.SIGCHLD, lambda: True)
self.assertEqual(len(self.loop._signal_handlers), 2)
m_signal.set_wakeup_fd.reset_mock()
self.loop.close()
self.assertEqual(len(self.loop._signal_handlers), 0)
m_signal.set_wakeup_fd.assert_called_once_with(-1)
class UnixReadPipeTransportTests(unittest.TestCase): class UnixReadPipeTransportTests(unittest.TestCase):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment