From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Fri, 29 May 2020 12:17:42 +0000 (-0700) Subject: [3.8] bpo-25872: Fix KeyError in linecache when multithreaded (GH-18007) (GH-20092) X-Git-Tag: v3.7.8rc1~33 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=852e8a7ed4d3d48e5c1c8120cfc932eb6a84bb8e;p=thirdparty%2FPython%2Fcpython.git [3.8] bpo-25872: Fix KeyError in linecache when multithreaded (GH-18007) (GH-20092) Backporting to 3.8 and adding a NEWS item (I should have added one to the master branch -- oh well). (cherry picked from commit b86636bff4b29ce23c886df079715dd951f13a07) Co-authored-by: Andrew Kuchling --- diff --git a/Lib/linecache.py b/Lib/linecache.py index 3afcce1f0a14..c87e1807bfaf 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py @@ -73,10 +73,10 @@ def checkcache(filename=None): try: stat = os.stat(fullname) except OSError: - del cache[filename] + cache.pop(filename, None) continue if size != stat.st_size or mtime != stat.st_mtime: - del cache[filename] + cache.pop(filename, None) def updatecache(filename, module_globals=None): @@ -86,7 +86,7 @@ def updatecache(filename, module_globals=None): if filename in cache: if len(cache[filename]) != 1: - del cache[filename] + cache.pop(filename, None) if not filename or (filename.startswith('<') and filename.endswith('>')): return [] diff --git a/Misc/NEWS.d/next/Library/2020-05-14-13-25-36.bpo-25872.5D5538.rst b/Misc/NEWS.d/next/Library/2020-05-14-13-25-36.bpo-25872.5D5538.rst new file mode 100644 index 000000000000..3fd8bac73edb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-05-14-13-25-36.bpo-25872.5D5538.rst @@ -0,0 +1,2 @@ +:mod:`linecache` could crash with a :exc:`KeyError` when accessed from multiple threads. +Fix by Michael Graczyk.