From: Sam Gross Date: Tue, 10 Mar 2026 18:47:58 +0000 (-0400) Subject: gh-142763: Fix race in ZoneInfo cache eviction (gh-144978) X-Git-Tag: v3.15.0a8~366 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=665c1db94f46f8e1a18a8c2f89adb3bc72cb83dc;p=thirdparty%2FPython%2Fcpython.git gh-142763: Fix race in ZoneInfo cache eviction (gh-144978) The cache may be cleared between the evaluation of the if statement and the call to popitem. --- diff --git a/Lib/zoneinfo/_zoneinfo.py b/Lib/zoneinfo/_zoneinfo.py index 3ffdb4c83719..bd3fefc6c9d9 100644 --- a/Lib/zoneinfo/_zoneinfo.py +++ b/Lib/zoneinfo/_zoneinfo.py @@ -47,7 +47,11 @@ class ZoneInfo(tzinfo): cls._strong_cache[key] = cls._strong_cache.pop(key, instance) if len(cls._strong_cache) > cls._strong_cache_size: - cls._strong_cache.popitem(last=False) + try: + cls._strong_cache.popitem(last=False) + except KeyError: + # another thread may have already emptied the cache + pass return instance diff --git a/Misc/NEWS.d/next/Library/2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst b/Misc/NEWS.d/next/Library/2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst new file mode 100644 index 000000000000..a5330365e3e4 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst @@ -0,0 +1,2 @@ +Fix a race condition between :class:`zoneinfo.ZoneInfo` creation and +:func:`zoneinfo.ZoneInfo.clear_cache` that could raise :exc:`KeyError`.