From: Guido van Rossum Date: Fri, 14 Nov 2014 19:45:47 +0000 (-0800) Subject: - Issue #22841: Reject coroutines in asyncio add_signal_handler(). X-Git-Tag: v3.5.0a1~485^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e36fcde38309f116c6c06042ad80e7debb7db743;p=python - Issue #22841: Reject coroutines in asyncio add_signal_handler(). Patch by Ludovic.Gasc. --- diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index b16f946ae4..e49212e5ea 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -13,6 +13,7 @@ import threading 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 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop): 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 --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py index e397598222..2f3fa185c9 100644 --- a/Lib/test/test_asyncio/test_unix_events.py +++ b/Lib/test/test_asyncio/test_unix_events.py @@ -63,6 +63,18 @@ class SelectorEventLoopSignalTests(test_utils.TestCase): self.loop.add_signal_handler, 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 --git a/Misc/NEWS b/Misc/NEWS index bb58965623..6a4b81f54b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -36,6 +36,9 @@ Core and Builtins Library ------- +- Issue #22841: Reject coroutines in asyncio add_signal_handler(). + Patch by Ludovic.Gasc. + - Issue #22849: Fix possible double free in the io.TextIOWrapper constructor. - Issue #12728: Different Unicode characters having the same uppercase but