asyncio, Tulip issue 126: call_soon(), call_soon_threadsafe(), call_later(),
call_at() and run_in_executor() now raise a TypeError if the callback is a
coroutine function.
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 48b3ee3..4b7b161 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -227,6 +227,8 @@
 
     def call_at(self, when, callback, *args):
         """Like call_later(), but uses an absolute time."""
+        if tasks.iscoroutinefunction(callback):
+            raise TypeError("coroutines cannot be used with call_at()")
         timer = events.TimerHandle(when, callback, args)
         heapq.heappush(self._scheduled, timer)
         return timer
@@ -241,6 +243,8 @@
         Any positional arguments after the callback will be passed to
         the callback when it is called.
         """
+        if tasks.iscoroutinefunction(callback):
+            raise TypeError("coroutines cannot be used with call_soon()")
         handle = events.Handle(callback, args)
         self._ready.append(handle)
         return handle
@@ -252,6 +256,8 @@
         return handle
 
     def run_in_executor(self, executor, callback, *args):
+        if tasks.iscoroutinefunction(callback):
+            raise TypeError("coroutines cannot be used with run_in_executor()")
         if isinstance(callback, events.Handle):
             assert not args
             assert not isinstance(callback, events.TimerHandle)
diff --git a/Lib/asyncio/test_utils.py b/Lib/asyncio/test_utils.py
index 7c8e1dc..deab7c3 100644
--- a/Lib/asyncio/test_utils.py
+++ b/Lib/asyncio/test_utils.py
@@ -135,7 +135,7 @@
         if name.startswith('__') and name.endswith('__'):
             # skip magic names
             continue
-        dct[name] = unittest.mock.Mock(return_value=None)
+        dct[name] = MockCallback(return_value=None)
     return type('TestProtocol', (base,) + base.__bases__, dct)()
 
 
@@ -274,3 +274,6 @@
 
     def _write_to_self(self):
         pass
+
+def MockCallback(**kwargs):
+    return unittest.mock.Mock(spec=['__call__'], **kwargs)