summaryrefslogtreecommitdiff
path: root/Objects/genobject.c
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2016-09-07 08:47:18 -0700
committerBenjamin Peterson <benjamin@python.org>2016-09-07 08:47:18 -0700
commitb375db5eb6fe026536ed720cb8cd645e55eb3e81 (patch)
tree899fff818f6cf8ad50510a2f3f143dcc51ff4a59 /Objects/genobject.c
parent1803968ed2035e28cbe1e9136e79a8da7929466d (diff)
parentfb19cd13c6d051631ebe04ee294c663f3a6cb443 (diff)
downloadcpython-b375db5eb6fe026536ed720cb8cd645e55eb3e81.tar.gz
merge 3.5 (#27968)
Diffstat (limited to 'Objects/genobject.c')
-rw-r--r--Objects/genobject.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 104d90b3e6..562d41d674 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -21,7 +21,7 @@ void
_PyGen_Finalize(PyObject *self)
{
PyGenObject *gen = (PyGenObject *)self;
- PyObject *res;
+ PyObject *res = NULL;
PyObject *error_type, *error_value, *error_traceback;
if (gen->gi_frame == NULL || gen->gi_frame->f_stacktop == NULL)
@@ -33,23 +33,26 @@ _PyGen_Finalize(PyObject *self)
/* If `gen` is a coroutine, and if it was never awaited on,
issue a RuntimeWarning. */
- if (gen->gi_code != NULL
- && ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE
- && gen->gi_frame->f_lasti == -1
- && !PyErr_Occurred()
- && PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
- "coroutine '%.50S' was never awaited",
- gen->gi_qualname)) {
- res = NULL; /* oops, exception */
+ if (gen->gi_code != NULL &&
+ ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE &&
+ gen->gi_frame->f_lasti == -1) {
+ if (!error_value) {
+ PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
+ "coroutine '%.50S' was never awaited",
+ gen->gi_qualname);
+ }
}
else {
res = gen_close(gen, NULL);
}
- if (res == NULL)
- PyErr_WriteUnraisable(self);
- else
+ if (res == NULL) {
+ if (PyErr_Occurred())
+ PyErr_WriteUnraisable(self);
+ }
+ else {
Py_DECREF(res);
+ }
/* Restore the saved exception. */
PyErr_Restore(error_type, error_value, error_traceback);