summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
Diffstat (limited to 'Lib')
-rw-r--r--Lib/asyncio/unix_events.py3
-rw-r--r--Lib/test/test_asyncio/test_unix_events.py12
2 files changed, 15 insertions, 0 deletions
diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
index b16f946..e49212e 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 e397598..2f3fa18 100644
--- a/Lib/test/test_asyncio/test_unix_events.py
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -64,6 +64,18 @@ class SelectorEventLoopSignalTests(test_utils.TestCase):
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