Commit c8c97344 authored by Denis Bilenko's avatar Denis Bilenko

run signal handler in a separate greenlet

parent 0ebd48e3
......@@ -83,13 +83,15 @@ def kill(greenlet, exception=GreenletExit):
core.active_event(greenlet.throw, exception)
def _deliver_exception_to_MAIN(g):
if not g.successful():
MAIN.throw(*g.exc_info())
def signal(signalnum, handler, *args, **kwargs):
def deliver_exception_to_MAIN():
try:
handler(*args, **kwargs)
except:
MAIN.throw(*sys.exc_info())
return core.signal(signalnum, deliver_exception_to_MAIN)
from gevent.greenlet import Greenlet
def wrapper():
Greenlet.spawn(handler, *args, **kwargs).rawlink(_deliver_exception_to_MAIN)
return core.signal(signalnum, wrapper)
if _original_fork is not None:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment