Staging
v0.5.1
https://github.com/python/cpython
Revision d8948c5e09c4a2a818f6f6cfaf8064f2c2138fa5 authored by Miss Islington (bot) on 29 May 2018, 22:37:06 UTC, committed by GitHub on 29 May 2018, 22:37:06 UTC

Currently, asyncio.wait_for(fut), upon reaching the timeout deadline,
cancels the future and returns immediately.  This is problematic for
when *fut* is a Task, because it will be left running for an arbitrary
amount of time.  This behavior is iself surprising and may lead to
related bugs such as the one described in bpo-33638:

    condition = asyncio.Condition()
    async with condition:
        await asyncio.wait_for(condition.wait(), timeout=0.5)

Currently, instead of raising a TimeoutError, the above code will fail
with `RuntimeError: cannot wait on un-acquired lock`, because
`__aexit__` is reached _before_ `condition.wait()` finishes its
cancellation and re-acquires the condition lock.

To resolve this, make `wait_for` await for the task cancellation.
The tradeoff here is that the `timeout` promise may be broken if the
task decides to handle its cancellation in a slow way.  This represents
a behavior change and should probably not be back-patched to 3.6 and
earlier.
(cherry picked from commit e2b340ab4196e1beb902327f503574b5d7369185)

Co-authored-by: Elvis Pranskevichus <elvis@magic.io>
1 parent 0364342
Raw File
Tip revision: d8948c5e09c4a2a818f6f6cfaf8064f2c2138fa5 authored by Miss Islington (bot) on 29 May 2018, 22:37:06 UTC
bpo-32751: Wait for task cancellation in asyncio.wait_for() (GH-7216)
Tip revision: d8948c5
.gitignore
# added for local development
.buildaix/
Modules/python.exp
buildaix/
installp/
.gitignore

# Two-trick pony for OSX and other case insensitive file systems:
# Ignore ./python binary on Unix but still look into ./Python/ directory.
/python
!/Python/
*.cover
*.iml
*.o
*.orig
*.pyc
*.pyd
*.pyo
*.rej
*.swp
*~
*.gc??
*.profclang?
*.profraw
*.dyn
.gdb_history
Doc/build/
Doc/venv/
Doc/.venv/
Doc/env/
Doc/.env/
Include/pydtrace_probes.h
Lib/distutils/command/*.pdb
Lib/lib2to3/*.pickle
Lib/test/data/*
Makefile
Makefile.pre
Misc/python.pc
Misc/python-config.sh
Modules/Setup
Modules/Setup.config
Modules/Setup.local
Modules/config.c
Modules/ld_so_aix
Programs/_freeze_importlib
Programs/_freeze_importlib.exe
Programs/_testembed
Programs/_testembed.exe
PC/python_nt*.h
PC/pythonnt_rc*.h
PC/*/*.exe
PC/*/*.exp
PC/*/*.lib
PC/*/*.bsc
PC/*/*.dll
PC/*/*.pdb
PC/*/*.user
PC/*/*.ncb
PC/*/*.suo
PC/*/Win32-temp-*
PC/*/x64-temp-*
PC/*/amd64
PCbuild/*.user
PCbuild/*.suo
PCbuild/*.*sdf
PCbuild/*-pgi
PCbuild/*-pgo
PCbuild/*.VC.db
PCbuild/*.VC.opendb
PCbuild/.vs/
PCbuild/amd64/
PCbuild/obj/
PCbuild/win32/
.purify
Parser/pgen
Parser/pgen.exe
__pycache__
autom4te.cache
build/
buildno
config.cache
config.log
config.status
config.status.lineno
core
db_home
.hg/
.idea/
ipch/
libpython*.a
libpython*.so*
libpython*.dylib
libpython*.dll
platform
pybuilddir.txt
pyconfig.h
python-config
python-config.py
python.bat
python.exe
python-gdb.py
python.exe-gdb.py
reflog.txt
.svn/
tags
TAGS
.coverage
coverage/
externals/
htmlcov/
Tools/msi/obj
Tools/ssl/amd64
Tools/ssl/win32
.vs/
.vscode/
gmon.out
back to top