Skip to content
Merged
Changes from 1 commit
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
Next Next commit
[3.8] bpo-25872: Fix KeyError using linecache from multiple threads (G…
…H-18007)

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 akuchling committed May 14, 2020
commit 45240f64e140be630f2c620a3d65989a88ed6e32
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