Skip to content

Commit

Permalink
[3.8] bpo-25872: Fix KeyError in linecache when multithreaded (python…
Browse files Browse the repository at this point in the history
…GH-18007) (pythonGH-20092)

Backporting to 3.8 and adding a NEWS item (I should have added one to the master branch -- oh well).
  • Loading branch information
akuchling authored May 29, 2020
1 parent 6381ee0 commit b86636b
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 3 deletions.
6 changes: 3 additions & 3 deletions Lib/linecache.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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 []

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
:mod:`linecache` could crash with a :exc:`KeyError` when accessed from multiple threads.
Fix by Michael Graczyk.

0 comments on commit b86636b

Please sign in to comment.