(original) (raw)

changeset: 93486:44e77709daa4 parent: 93480:19b2c54e5f09 parent: 93485:d244e1770f1b user: Guido van Rossum guido@python.org date: Fri Nov 14 11:48:37 2014 -0800 files: Lib/asyncio/unix_events.py Lib/test/test_asyncio/test_unix_events.py Misc/NEWS description: - Issue #22841: Reject coroutines in asyncio add_signal_handler(). Patch by Ludovic.Gasc. diff -r 19b2c54e5f09 -r 44e77709daa4 Lib/asyncio/unix_events.py --- a/Lib/asyncio/unix_events.py Wed Nov 12 10:23:44 2014 -0500 +++ b/Lib/asyncio/unix_events.py Fri Nov 14 11:48:37 2014 -0800 @@ -13,6 +13,7 @@ from . import base_events from . import base_subprocess from . import constants +from . import coroutines from . import events from . import selector_events from . import selectors @@ -66,6 +67,8 @@ Raise ValueError if the signal number is invalid or uncatchable. Raise RuntimeError if there is a problem setting up the handler. """ + if coroutines.iscoroutinefunction(callback): + raise TypeError("coroutines cannot be used with call_soon()") self._check_signal(sig) try: # set_wakeup_fd() raises ValueError if this is not the diff -r 19b2c54e5f09 -r 44e77709daa4 Lib/test/test_asyncio/test_unix_events.py --- a/Lib/test/test_asyncio/test_unix_events.py Wed Nov 12 10:23:44 2014 -0500 +++ b/Lib/test/test_asyncio/test_unix_events.py Fri Nov 14 11:48:37 2014 -0800 @@ -64,6 +64,18 @@ signal.SIGINT, lambda: True) @mock.patch('asyncio.unix_events.signal') + def test_add_signal_handler_coroutine_error(self, m_signal): + + @asyncio.coroutine + def simple_coroutine(): + yield from [] + + self.assertRaises( + TypeError, + self.loop.add_signal_handler, + signal.SIGINT, simple_coroutine) + + @mock.patch('asyncio.unix_events.signal') def test_add_signal_handler(self, m_signal): m_signal.NSIG = signal.NSIG diff -r 19b2c54e5f09 -r 44e77709daa4 Misc/NEWS --- a/Misc/NEWS Wed Nov 12 10:23:44 2014 -0500 +++ b/Misc/NEWS Fri Nov 14 11:48:37 2014 -0800 @@ -183,6 +183,9 @@ Library ------- +- Issue #22841: Reject coroutines in asyncio add_signal_handler(). + Patch by Ludovic.Gasc. + - Issue #19494: Added urllib.request.HTTPBasicPriorAuthHandler. Patch by Matej Cepl. /guido@python.org