cpython/Lib
Yury Selivanov e89f95bfd0 [3.6] bpo-30039: Don't run signal handlers while resuming a yield from stack (GH-1081) (#1640)
If we have a chain of generators/coroutines that are 'yield from'ing
each other, then resuming the stack works like:

- call send() on the outermost generator
- this enters _PyEval_EvalFrameDefault, which re-executes the
  YIELD_FROM opcode
- which calls send() on the next generator
- which enters _PyEval_EvalFrameDefault, which re-executes the
  YIELD_FROM opcode
- ...etc.

However, every time we enter _PyEval_EvalFrameDefault, the first thing
we do is to check for pending signals, and if there are any then we
run the signal handler. And if it raises an exception, then we
immediately propagate that exception *instead* of starting to execute
bytecode. This means that e.g. a SIGINT at the wrong moment can "break
the chain" – it can be raised in the middle of our yield from chain,
with the bottom part of the stack abandoned for the garbage collector.

The fix is pretty simple: there's already a special case in
_PyEval_EvalFrameEx where it skips running signal handlers if the next
opcode is SETUP_FINALLY. (I don't see how this accomplishes anything
useful, but that's another story.) If we extend this check to also
skip running signal handlers when the next opcode is YIELD_FROM, then
that closes the hole – now the exception can only be raised at the
innermost stack frame.

This shouldn't have any performance implications, because the opcode
check happens inside the "slow path" after we've already determined
that there's a pending signal or something similar for us to process;
the vast majority of the time this isn't true and the new check
doesn't run at all..
(cherry picked from commit ab4413a7e9)
2017-06-09 17:06:39 -04:00
..
asyncio [3.6] call remove_done_callback in finally section (GH-1688) (#1755) 2017-05-23 00:36:23 -07:00
collections merge 2016-12-31 12:02:42 -07:00
concurrent Issue #27895: Spelling fixes (Contributed by Ville Skyttä). 2016-09-07 12:03:06 +00:00
ctypes bpo-30125: disable faulthandler in ctypes test_SEH (#1237) (#1343) 2017-04-28 16:06:48 +02:00
curses Issue #13051: Fixed recursion errors in large or resized curses.textpad.Textbox. 2016-12-28 10:16:06 +02:00
dbm Issue #28847: dbm.dumb now supports reading read-only files and no longer 2016-12-07 11:00:06 +02:00
distutils bpo-30273: update distutils.sysconfig for venv's created from Python (#1515) (#1625) 2017-05-16 17:58:02 -07:00
email [3.6] Fix typos in multiple .rst files (GH-1668) (#1702) 2017-05-22 00:26:01 +03:00
encodings Revert #27959: ImportError within an encoding module should also skip the encoding 2016-09-09 08:56:37 -07:00
ensurepip Merge - upgrade pip/setuptools 2016-11-15 21:18:40 -05:00
html #27364: fix "incorrect" uses of escape character in the stdlib. 2016-09-08 13:59:53 -04:00
http Issue #22493: Inline flags now should be used only at the start of the 2016-09-11 12:50:02 +03:00
idlelib [3.6] IDLE test_textview: add comments and test, increase coverage to 100% (GH-1641) (#2018) 2017-06-09 15:59:31 -04:00
importlib bpo-29862: Fix grammar in importlib.reload() exception (GH-809) (GH-811) 2017-03-25 03:41:59 -07:00
json Fixed the documentation of parse_constant argument in json.load(). 2016-11-12 22:48:33 +02:00
lib2to3 [3.6] bpo-23894: make lib2to3 recognize f-strings (GH-1733) (#1737) 2017-05-22 22:23:29 -07:00
logging bpo-30378: Fix the problem that SysLogHandler can't handle IPv6 addresses (#1676) (#1903) 2017-06-01 22:20:27 +08:00
msilib #27364: fix "incorrect" uses of escape character in the stdlib. 2016-09-08 13:59:53 -04:00
multiprocessing [3.6] bpo-30414: multiprocessing.Queue._feed do not break from main loop on exc (GH-1683) (#1815) 2017-05-25 16:57:46 +02:00
pydoc_data Update pydoc topics for 3.6.0rc1 2017-03-04 12:18:43 -05:00
site-packages Issue #29283: Delete accidentally added Lib/site-packages/README 2017-01-30 13:55:49 +03:00
sqlite3 bpo-28518: Start a transaction implicitly before a DML statement (#245) (#318) 2017-02-26 19:09:10 +03:00
test [3.6] bpo-30039: Don't run signal handlers while resuming a yield from stack (GH-1081) (#1640) 2017-06-09 17:06:39 -04:00
tkinter Fix spelling mistakes in tkinter.py (#1751) 2017-05-23 09:14:02 +03:00
turtledemo Issue #27117: Make ColorDelegator htest and turtledemo work with dark theme. 2016-05-29 01:40:30 -04:00
unittest bpo-30078: Add an example of passing a path to unittest (GH-1178) 2017-04-20 07:36:57 +03:00
urllib bpo-29976: urllib.parse clarify '' in scheme values. (GH-984) (GH-1692) 2017-05-20 23:23:03 -07:00
venv Fixes #29213: merged fix from 3.5. 2017-02-02 19:26:48 +00:00
wsgiref Issue #26721: Change StreamRequestHandler.wfile to BufferedIOBase 2016-06-29 10:12:22 +00:00
xml bpo-30264: ExpatParser closes the source on error (#1451) (#1474) 2017-05-05 10:04:57 +02:00
xmlrpc bpo-29615: backport to 3.6 (#478) 2017-03-05 18:14:06 +02:00
__future__.py
__phello__.foo.py
_bootlocale.py
_collections_abc.py bpo-26915: Test identity first in index() and count() of collections.abc.Sequence (GH-553) 2017-03-08 11:43:35 +08:00
_compat_pickle.py Issue #15767: Add ModuleNotFoundError. 2016-09-07 15:42:32 -07:00
_compression.py
_dummy_thread.py
_markupbase.py
_osx_support.py Fix misplaced positional argument in OS X support library (#1137) 2017-04-14 17:44:34 +03:00
_pydecimal.py Issue #27348: Merge exception formatting fix from 3.5 into 3.6 2016-09-22 10:33:21 +00:00
_pyio.py Merge from 3.5. 2016-12-07 13:31:47 +02:00
_sitebuiltins.py
_strptime.py
_threading_local.py
_weakrefset.py
abc.py bpo-29581: bpo-29581: Make ABCMeta.__new__ pass **kwargs to type.__new__ (GH-527) (GH-1282) 2017-06-06 17:31:03 -07:00
aifc.py [3.6] bpo-29110: Fix file object leak in aifc.open (#310) 2017-02-27 04:09:32 +09:00
antigravity.py Issue #28181: Get antigravity over HTTPS. Patch by Kaartic Sivaraam. 2016-09-16 13:48:10 +02:00
argparse.py Issue #29290: Merge 3.5. 2017-01-22 14:39:20 +08:00
ast.py
asynchat.py Issue #25002: Back out asyncore/asynchat deprecation. 2016-10-25 18:42:51 -07:00
asyncore.py Issue #25002: Back out asyncore/asynchat deprecation. 2016-10-25 18:42:51 -07:00
base64.py Add Python version since deprecation in base64 methods. (#33) (#429) 2017-03-03 18:07:18 +03:00
bdb.py
binhex.py
bisect.py
bz2.py Issue #28225: bz2 module now supports pathlib 2016-10-02 20:07:06 +03:00
calendar.py Issue #28255: calendar.TextCalendar().prmonth() no longer prints a space 2016-10-25 15:02:36 +03:00
cgi.py Issue #27105: Add cgi.test() to __all__, based on Jacek Kołodziej’s patch 2016-06-06 01:53:28 +00:00
cgitb.py
chunk.py
cmd.py
code.py Issue #27573 make the exit message configurable. 2016-08-24 01:42:15 +10:00
codecs.py
codeop.py
colorsys.py
compileall.py Issue #28485: Merge single-threading fix from 3.5 into 3.6 2016-11-05 01:35:25 +00:00
configparser.py [3.6] bpo-29623: Make PathLike objects work with ConfigParser.read() (#242) (#432) 2017-03-03 20:48:37 +03:00
contextlib.py [3.6] bpo-29692: contextlib.contextmanager may incorrectly unchain RuntimeError (GH-949) (#1105) 2017-04-13 02:50:21 -07:00
copy.py
copyreg.py
cProfile.py
crypt.py
csv.py Issue #18219: Optimize csv.DictWriter for large number of columns. 2016-10-21 19:47:57 +09:00
datetime.py Issue #24773: fix datetime.time constructor docstring 2017-01-04 12:01:16 +01:00
decimal.py
difflib.py #27364: fix "incorrect" uses of escape character in the stdlib. 2016-09-08 13:59:53 -04:00
dis.py Issue #28317: The disassembler now decodes FORMAT_VALUE argument. 2016-10-08 12:34:25 +03:00
doctest.py #27364: fix "incorrect" uses of escape character in the stdlib. 2016-09-08 13:59:53 -04:00
dummy_threading.py
enum.py closes issue29167: fix race condition in (Int)Flag 2017-01-24 12:12:06 -08:00
filecmp.py
fileinput.py
fnmatch.py Issue #22493: Inline flags now should be used only at the start of the 2016-09-11 12:50:02 +03:00
formatter.py
fractions.py Issue #27832: Make _normalize parameter to Fraction.__init__ keyword-only. 2016-08-23 16:16:52 +01:00
ftplib.py Issue #28022: Deprecate ssl-related arguments in favor of SSLContext. 2016-09-10 23:23:33 +02:00
functools.py Sync-up with 3.7 by backporting minor lru_cache code beautification 2017-01-08 18:22:24 -08:00
genericpath.py Issue #26027, #27524: Add PEP 519/__fspath__() support to os and 2016-08-26 14:44:48 -07:00
getopt.py
getpass.py getpass: update docstrings (GH-49) (GH-419) 2017-03-02 21:56:06 -08:00
gettext.py Issue #28563: Make plural form selection more lenient and accepting 2016-11-14 19:29:59 +02:00
glob.py Issue #27998: Removed workarounds for supporting bytes paths on Windows in 2016-10-05 23:17:10 +03:00
gzip.py Issue #28227: gzip now supports pathlib 2016-10-02 13:47:58 +03:00
hashlib.py Issue #16113: Add SHA-3 and SHAKE support to hashlib module. 2016-09-07 11:58:24 +02:00
heapq.py
hmac.py Use sequence repetition instead of bytes constructor with integer argument. 2016-09-11 14:41:02 +03:00
imaplib.py bpo-30329: Catch Windows error 10022 on shutdown() (#1538) (#1620) 2017-05-16 15:29:41 -07:00
imghdr.py Issue #28228: imghdr now supports pathlib 2016-10-01 05:01:54 +03:00
imp.py Merge for #26844 2016-07-15 10:59:11 -07:00
inspect.py [3.6] bpo-29822: make inspect.isabstract() work during __init_subclass__ (#1979) 2017-06-07 07:21:34 +03:00
io.py Issue #1602: Windows console doesn't input or print Unicode (PEP 528) 2016-08-30 21:22:36 -07:00
ipaddress.py Issue #20508: Improve exception message of IPv{4,6}Network.__getitem__ 2016-06-11 22:30:05 +03:00
keyword.py
linecache.py
locale.py Issue #27076: Merge spelling from 3.5 2016-05-26 06:03:19 +00:00
lzma.py Issue #28229: lzma module now supports pathlib 2016-10-04 20:41:20 +03:00
macpath.py
macurl2path.py
mailbox.py Issue #28764: Fix a test_mailbox failure on Android API 24 when run as a non-root user. 2016-12-12 09:55:57 +01:00
mailcap.py #14977: Make mailcap respect the order of the lines in the mailcap file. 2016-09-09 20:04:23 -04:00
mimetypes.py Issue #27108: Add missing names to mimetypes.__all__, by Jacek Kołodziej 2016-06-06 01:59:19 +00:00
modulefinder.py
netrc.py
nntplib.py
ntpath.py Issue #27355: Removed support for Windows CE. It was never finished, 2016-09-05 15:11:23 -07:00
nturl2path.py
numbers.py
opcode.py Issue #28257: Improved error message when pass a non-iterable as 2016-10-02 10:33:46 +03:00
operator.py
optparse.py
os.py Fixes empty tuple case. 2016-11-19 21:14:27 -08:00
pathlib.py bpo-30177: pathlib: include the full path in resolve(strict=False) (#1893) (#1985) 2017-06-07 10:18:56 -07:00
pdb.py Issue #20766: Merge with 3.5. 2016-10-12 20:16:05 +02:00
pickle.py Issue #17711: Fixed unpickling by the persistent ID with protocol 0. 2016-07-17 11:35:35 +03:00
pickletools.py Use sequence repetition instead of bytes constructor with integer argument. 2016-09-11 14:41:02 +03:00
pipes.py
pkgutil.py Issue #17211: Yield a namedtuple in pkgutil. 2016-09-07 18:37:17 -07:00
platform.py [3.6] bpo-27593: Get SCM build info from git instead of hg. (#446) (#454) 2017-03-04 01:05:06 -05:00
plistlib.py Issue #28321: Fixed writing non-BMP characters with binary format in plistlib. 2016-10-04 20:08:29 +03:00
poplib.py bpo-30329: Catch Windows error 10022 on shutdown() (#1538) (#1620) 2017-05-16 15:29:41 -07:00
posixpath.py Issue #26027, #27524: Add PEP 519/__fspath__() support to os and 2016-08-26 14:44:48 -07:00
pprint.py
profile.py
pstats.py bpo-29554: Improve docs for pstat module and profile. (#88) (#227) 2017-02-22 04:55:33 +03:00
pty.py
py_compile.py
pyclbr.py
pydoc.py Issue #15767: Use ModuleNotFoundError. 2016-09-07 16:56:15 -07:00
queue.py
quopri.py
random.py Issue #29055: Suppress upstream exception for random.choice() 2016-12-27 01:06:52 -08:00
re.py Issue #28637: Reapply changeset 223731925d06 2016-11-14 12:35:55 +01:00
reprlib.py
rlcompleter.py
runpy.py [backport to 3.5] - issue26896 - Disambiguate uses of "importer" with "finder". 2016-09-07 00:52:20 -07:00
sched.py Issue #5830: Remove old comment. Add empty slots. 2016-10-24 07:31:55 -07:00
secrets.py Issue #29061: secrets.randbelow() would hang with a negative input 2016-12-29 22:54:25 -07:00
selectors.py Issue #27759: Fix selectors incorrectly retain invalid file descriptors. 2016-10-06 14:03:03 -04:00
shelve.py
shlex.py Fixed #29132: Updated shlex to work better with punctuation chars in POSIX mode. 2017-01-15 10:06:52 +00:00
shutil.py Issue #14061: Misc fixes and cleanups in archiving code in shutil. 2016-12-16 19:00:55 +02:00
signal.py
site.py Issue #28637: No longer use re in site.py. 2016-11-08 20:17:35 +02:00
smtpd.py Issue #27110: Add smtpd.SMTPChannel to __all__, by Jacek Kołodziej 2016-06-06 02:03:11 +00:00
smtplib.py bpo-30394: Fix a socket leak in smtplib.SMTP.__init__() (#1700) (#1790) 2017-05-25 02:59:06 +08:00
sndhdr.py
socket.py Issue #26384: Merge from 3.5 2016-09-17 23:23:13 +03:00
socketserver.py Issue #26721: Change StreamRequestHandler.wfile to BufferedIOBase 2016-06-29 10:12:22 +00:00
sre_compile.py Issue #433028: Added support of modifier spans in regular expressions. 2016-09-10 00:57:55 +03:00
sre_constants.py [3.6] bpo-30398: Add a docstring for re.error. (GH-1647) (#1830) 2017-05-27 16:37:40 +03:00
sre_parse.py [3.6] bpo-30375: Correct the stacklevel of regex compiling warnings. (GH-1595) (#1604) 2017-05-16 18:16:15 +03:00
ssl.py Issue #28085: Add PROTOCOL_TLS_CLIENT and PROTOCOL_TLS_SERVER for SSLContext 2016-09-12 00:01:11 +02:00
stat.py
statistics.py Issue #27181 remove geometric_mean and defer for 3.7. 2016-10-05 03:24:45 +11:00
string.py #27364: fix "incorrect" uses of escape character in the stdlib. 2016-09-08 13:59:53 -04:00
stringprep.py
struct.py
subprocess.py bpo-30418: Popen.communicate() always ignore EINVAL (#2002) (#2004) 2017-06-08 23:14:07 +02:00
sunau.py
symbol.py Issue #27985: Implement PEP 526 -- Syntax for Variable Annotations. 2016-09-08 20:50:03 -07:00
symtable.py Issue #27985: Implement PEP 526 -- Syntax for Variable Annotations. 2016-09-08 20:50:03 -07:00
sysconfig.py Issue #28046: get_sysconfigdata_name() uses the _PYTHON_SYSCONFIGDATA_NAME 2016-09-11 22:22:24 +02:00
tabnanny.py fix function name in tabnanny documentation (GH-762) 2017-03-22 15:26:53 +08:00
tarfile.py Issue #26937: The chown() method of the tarfile.TarFile class does not fail now 2016-12-09 09:33:09 +01:00
telnetlib.py
tempfile.py
textwrap.py Issue #20491: The textwrap.TextWrapper class now honors non-breaking spaces. 2016-10-25 14:44:54 +03:00
this.py
threading.py bpo-29376: Fix assertion error in threading._DummyThread.is_alive() (GH-330) 2017-02-27 11:45:42 +08:00
timeit.py bpo-29661: fix contradiction in timeit.Timer.autorange's docstring (GH-331) (GH-353) 2017-02-28 11:28:44 +08:00
token.py
tokenize.py Issue #26331: Implement the parsing part of PEP 515. 2016-09-09 14:57:09 -07:00
trace.py More typo fixes for 3.6 2016-06-04 05:06:25 +00:00
traceback.py Issue #27348: Merge exception formatting fix from 3.5 into 3.6 2016-09-22 10:33:21 +00:00
tracemalloc.py
tty.py
turtle.py Correct spelling in documentation and code comment 2016-09-10 10:38:28 +00:00
types.py Issue #28003: Implement PEP 525 -- Asynchronous Generators. 2016-09-08 22:01:51 -07:00
typing.py [3.6] bpo-28556: Routine updates to typing (GH-1366) (#1416) 2017-05-03 09:38:01 -07:00
uu.py
uuid.py
warnings.py Issue #28835: Tidy previous showwarning changes based on review comments. 2016-12-06 17:12:47 -05:00
wave.py
weakref.py Fix #29519: weakref spewing exceptions during interp finalization 2017-02-10 00:14:55 -08:00
webbrowser.py Issue #23262: The webbrowser module now supports Firefox 36+ and derived 2016-10-30 19:16:33 +02:00
xdrlib.py
zipapp.py
zipfile.py [3.6] Revert bpo-26293 for zipfile breakage. See also bpo-29094. (GH-1484). (#1485) 2017-05-06 15:10:50 +03:00