[Python-checkins] [3.8] bpo-25872: Fix KeyError in linecache when multithreaded (GH-18007) (GH-20092)
Andrew Kuchling
webhook-mailer at python.org
Fri May 29 07:59:48 EDT 2020
https://github.com/python/cpython/commit/b86636bff4b29ce23c886df079715dd951f13a07
commit: b86636bff4b29ce23c886df079715dd951f13a07
branch: 3.8
author: Andrew Kuchling <amk at amk.ca>
committer: GitHub <noreply at github.com>
date: 2020-05-29T04:59:44-07:00
summary:
[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).
files:
A Misc/NEWS.d/next/Library/2020-05-14-13-25-36.bpo-25872.5D5538.rst
M Lib/linecache.py
diff --git a/Lib/linecache.py b/Lib/linecache.py
index 3afcce1f0a145..c87e1807bfafa 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 0000000000000..3fd8bac73edbe
--- /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.
More information about the Python-checkins
mailing list