]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.8] bpo-25872: Fix KeyError in linecache when multithreaded (GH-18007) (GH-20092)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 29 May 2020 12:17:42 +0000 (05:17 -0700)
committerGitHub <noreply@github.com>
Fri, 29 May 2020 12:17:42 +0000 (05:17 -0700)
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 <amk@amk.ca>
Lib/linecache.py
Misc/NEWS.d/next/Library/2020-05-14-13-25-36.bpo-25872.5D5538.rst [new file with mode: 0644]

index 3afcce1f0a14566c67e97527e95f90afba89c07f..c87e1807bfafaabe5df5b7a97646b73424964376 100644 (file)
@@ -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 (file)
index 0000000..3fd8bac
--- /dev/null
@@ -0,0 +1,2 @@
+:mod:`linecache` could crash with a :exc:`KeyError` when accessed from multiple threads.
+Fix by Michael Graczyk.