Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
issue-25872: Fix KeyError using linecache from multiple threads (GH-1…
…8007)

The crash that this fixes occurs when using traceback and other modules from multiple threads;
del cache[filename] can raise a KeyError.
(cherry picked from commit d72ea60)

Co-authored-by: Michael Graczyk <mgraczyk@users.noreply.github.com>
  • Loading branch information
mgraczyk authored and miss-islington committed May 13, 2020
commit 9574371d24650a9b2b2112b130df2dd83d2a7447
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