asyncio: Add close() back to Unix selector event loop, to remove all signal handlers. Should fix buildbot issues.

This commit is contained in:
Guido van Rossum 2013-11-06 20:25:50 -08:00
parent 79ed4c744a
commit 0b69fbc642
2 changed files with 21 additions and 0 deletions

View file

@ -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.

View file

@ -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):