From 18a3cbbd9b3581d1895ee69990f2ccb7159711a6 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sun, 20 May 2018 16:30:31 +0300 Subject: [PATCH] [3.6] bpo-33584: Fix several minor bugs in asyncio. (GH-7003) * str() was used instead of repr() in formatting one error message. * There was a reference leak in an error case. (cherry picked from commit 6655354afcd116c27486bb5ba1dfa50b369d8d85) --- Lib/asyncio/tasks.py | 2 +- Modules/_asynciomodule.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py index 9fe2a2fabf076a..a294dfbf5e57cd 100644 --- a/Lib/asyncio/tasks.py +++ b/Lib/asyncio/tasks.py @@ -233,7 +233,7 @@ def _step(self, exc=None): self._step, RuntimeError( 'yield was used instead of yield from for ' - 'generator in task {!r} with {}'.format( + 'generator in task {!r} with {!r}'.format( self, result))) else: # Yielding something else is an error. diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index f53387115e73aa..1430097f82dacd 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -2248,19 +2248,19 @@ task_step_impl(TaskObj *task, PyObject *exc) } if (res == 1) { /* `result` is a generator */ - PyObject *ret; - ret = task_set_error_soon( + o = task_set_error_soon( task, PyExc_RuntimeError, "yield was used instead of yield from for " - "generator in task %R with %S", task, result); + "generator in task %R with %R", task, result); Py_DECREF(result); - return ret; + return o; } /* The `result` is none of the above */ - Py_DECREF(result); - return task_set_error_soon( + o = task_set_error_soon( task, PyExc_RuntimeError, "Task got bad yield: %R", result); + Py_DECREF(result); + return o; self_await: o = task_set_error_soon(