if (PyErr_ExceptionMatches(asyncio_CancelledError)) {
/* CancelledError */
PyErr_Fetch(&et, &ev, &tb);
+ assert(et);
+ PyErr_NormalizeException(&et, &ev, &tb);
+ if (tb != NULL) {
+ PyException_SetTraceback(ev, tb);
+ }
FutureObj *fut = (FutureObj*)task;
_PyErr_StackItem *exc_state = &fut->fut_cancelled_exc_state;
/* Some other exception; pop it and call Task.set_exception() */
PyErr_Fetch(&et, &ev, &tb);
-
assert(et);
- if (!ev || !PyObject_TypeCheck(ev, (PyTypeObject *) et)) {
- PyErr_NormalizeException(&et, &ev, &tb);
- }
+ PyErr_NormalizeException(&et, &ev, &tb);
if (tb != NULL) {
PyException_SetTraceback(ev, tb);
}
+
o = future_set_exception((FutureObj*)task, ev);
if (!o) {
/* An exception in Task.set_exception() */
PyObject *et, *ev, *tb;
PyErr_Fetch(&et, &ev, &tb);
leave_task(task->task_loop, (PyObject*)task);
- _PyErr_ChainExceptions(et, ev, tb);
+ _PyErr_ChainExceptions(et, ev, tb); /* Normalizes (et, ev, tb) */
return NULL;
}
else {
}
PyErr_Fetch(&et, &ev, &tb);
- if (!ev || !PyObject_TypeCheck(ev, (PyTypeObject *) et)) {
- PyErr_NormalizeException(&et, &ev, &tb);
+ assert(et);
+ PyErr_NormalizeException(&et, &ev, &tb);
+ if (tb != NULL) {
+ PyException_SetTraceback(ev, tb);
}
result = task_step(task, ev);