Browse Source

merge 3.5 (closes #27811)

Benjamin Peterson 10 years ago
parent
commit
98020812e6
  1. 8
      Lib/test/test_coroutines.py
  2. 3
      Misc/NEWS
  3. 25
      Objects/genobject.c

8
Lib/test/test_coroutines.py

@ -1565,6 +1565,14 @@ class CoroutineTest(unittest.TestCase):
finally:
aw.close()
def test_fatal_coro_warning(self):
# Issue 27811
async def func(): pass
with warnings.catch_warnings():
warnings.filterwarnings("error")
func()
support.gc_collect()
class CoroAsyncIOCompatTest(unittest.TestCase):

3
Misc/NEWS

@ -29,6 +29,9 @@ Core and Builtins
- Issue #27506: Support passing the bytes/bytearray.translate() "delete"
argument by keyword.
- Issue #27811: Fix a crash when a coroutine that has not been awaited is
finalized with warnings-as-errors enabled.
- Issue #27587: Fix another issue found by PVS-Studio: Null pointer check
after use of 'def' in _PyState_AddModule().
Initial patch by Christian Heimes.

25
Objects/genobject.c

@ -24,26 +24,27 @@ _PyGen_Finalize(PyObject *self)
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
&& ((PyCodeObject *)gen->gi_code)->co_flags & CO_COROUTINE
&& gen->gi_frame != NULL
&& gen->gi_frame->f_lasti == -1
&& !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);

Loading…
Cancel
Save