Skip to content

Commit

Permalink
bpo-34066: Disabled interruption before SETUP_WITH and BEFORE_ASYNC_W…
Browse files Browse the repository at this point in the history
…ITH. (GH-8159)

This will prevent emitting a resource warning when the execution was
interrupted by Ctrl-C between calling open() and entering a 'with' block
in "with open()".
  • Loading branch information
serhiy-storchaka authored and ncoghlan committed Jul 9, 2018
1 parent cf7303e commit 3f4d90d
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Disabled interruption by Ctrl-C between calling ``open()`` and entering a
**with** block in ``with open()``.
15 changes: 11 additions & 4 deletions Python/ceval.c
Original file line number Diff line number Diff line change
Expand Up @@ -928,11 +928,18 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag)
Py_MakePendingCalls() above. */

if (_Py_atomic_load_relaxed(&_PyRuntime.ceval.eval_breaker)) {
if (_Py_OPCODE(*next_instr) == SETUP_FINALLY ||
_Py_OPCODE(*next_instr) == YIELD_FROM) {
/* Two cases where we skip running signal handlers and other
opcode = _Py_OPCODE(*next_instr);
if (opcode == SETUP_FINALLY ||
opcode == SETUP_WITH ||
opcode == BEFORE_ASYNC_WITH ||
opcode == YIELD_FROM) {
/* Few cases where we skip running signal handlers and other
pending calls:
- If we're about to enter the try: of a try/finally (not
- If we're about to enter the 'with:'. It will prevent
emitting a resource warning in the common idiom
'with open(path) as file:'.
- If we're about to enter the 'async with:'.
- If we're about to enter the 'try:' of a try/finally (not
*very* useful, but might help in some cases and it's
traditional)
- If we're resuming a chain of nested 'yield from' or
Expand Down

0 comments on commit 3f4d90d

Please sign in to comment.