Commit c410c7f8 authored by Denis Bilenko's avatar Denis Bilenko

Hub: store both type and value of exc_info; this fixes test__exc_info.py on Python2.4

parent d6fb3d68
......@@ -665,8 +665,7 @@ def get_header_version():
return levent._EVENT_VERSION
def set_exc_info(object value):
cdef object typ
def set_exc_info(object type, object value):
cdef PyThreadState* tstate = PyThreadState_GET()
if tstate.exc_type != NULL:
Py_DECREF(<object>tstate.exc_type)
......@@ -678,10 +677,9 @@ def set_exc_info(object value):
tstate.exc_type = NULL
tstate.exc_value = NULL
else:
typ = type(value)
Py_INCREF(typ)
Py_INCREF(type)
Py_INCREF(value)
tstate.exc_type = <void*>typ
tstate.exc_type = <void*>type
tstate.exc_value = <void *>value
tstate.exc_traceback = NULL
......
......@@ -169,7 +169,7 @@ class Hub(greenlet):
def switch(self):
cur = getcurrent()
assert cur is not self, 'Impossible to call blocking function in the event loop callback'
exception = sys.exc_info()[1]
exc_type, exc_value = sys.exc_info()[:2]
try:
switch_out = getattr(cur, 'switch_out', None)
if switch_out is not None:
......@@ -180,7 +180,7 @@ class Hub(greenlet):
sys.exc_clear()
return greenlet.switch(self)
finally:
core.set_exc_info(exception)
core.set_exc_info(exc_type, exc_value)
def run(self):
global _threadlocal
......
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