chiark / gitweb /
py/rmcr.py: Handle stray exceptions from coroutines more sensibly.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 15 May 2010 18:42:08 +0000 (19:42 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 15 May 2010 18:42:47 +0000 (19:42 +0100)
With a little luck this means that they won't just vanish silently.

py/rmcr.py

index f73a6cc9ab0a99e91935c5cac234573afd3b6070..70df8f3a296295eb25a55de4623b12cd0b01b558 100644 (file)
@@ -29,7 +29,7 @@ __pychecker__ = 'self=me'
 ### External dependencies.
 
 import thread as T
-from sys import exc_info
+from sys import exc_info, excepthook
 
 ###--------------------------------------------------------------------------
 ### What's going on?
@@ -134,11 +134,11 @@ class Coroutine (object):
       try:
         _debug('  _start(%s): call user (args = %s, kwargs = %s)' %
                (me, args, kwargs))
-        me._func(*args, **kwargs)
+        me._onexit = [me._func(*args, **kwargs), None]
       except:
         exc = exc_info()
         _debug('  _start(%s): caught exception (%s)' % (me, exc))
-        _switchto(findvictim(me.parent), None, exc)
+        me._onexit = [None, exc]
     finally:
       _debug('  _start(%s): finally' % me)
       _debug('  _start(%s): _onexit = %s' % (me, me._onexit))