From: Michael Graczyk Date: Wed, 13 May 2020 22:41:57 +0000 (-0500) Subject: issue-25872: Fix KeyError using linecache from multiple threads (GH-18007) X-Git-Tag: v3.9.0b1~90 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d72ea605218bbee6ae46648997d9bb76d0fba460;p=thirdparty%2FPython%2Fcpython.git issue-25872: Fix KeyError using linecache from multiple threads (GH-18007) The crash that this fixes occurs when using traceback and other modules from multiple threads; del cache[filename] can raise a KeyError. --- diff --git a/Lib/linecache.py b/Lib/linecache.py index ddd0abf2cf01..fa5dbd09eab8 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py @@ -71,10 +71,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): @@ -84,7 +84,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 []