diff -r 90bb32c9921c Objects/genobject.c --- a/Objects/genobject.c Sat Aug 20 08:27:06 2016 +0000 +++ b/Objects/genobject.c Sat Aug 20 11:15:01 2016 +0200 @@ -24,6 +24,13 @@ PyObject *res; PyObject *error_type, *error_value, *error_traceback; + if (gen->gi_frame == NULL || gen->gi_frame->f_stacktop == NULL) + /* Generator isn't paused, so no need to close */ + return; + + /* Save the current exception, if any. */ + PyErr_Fetch(&error_type, &error_value, &error_traceback); + /* If `gen` is a coroutine, and if it was never awaited on, issue a RuntimeWarning. */ if (gen->gi_code != NULL @@ -33,17 +40,12 @@ && !PyErr_Occurred() && PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", - gen->gi_qualname)) - return; - - if (gen->gi_frame == NULL || gen->gi_frame->f_stacktop == NULL) - /* Generator isn't paused, so no need to close */ - return; - - /* Save the current exception, if any. */ - PyErr_Fetch(&error_type, &error_value, &error_traceback); - - res = gen_close(gen, NULL); + gen->gi_qualname)) { + res = NULL; /* oops, exception */ + } + else { + res = gen_close(gen, NULL); + } if (res == NULL) PyErr_WriteUnraisable(self);