From b16460807586bf833c8b6ba14892b56c20c8f88e Mon Sep 17 00:00:00 2001 From: Sam Gross Date: Tue, 10 Mar 2026 14:47:58 -0400 Subject: [PATCH] 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. (cherry picked from commit 665c1db94f46f8e1a18a8c2f89adb3bc72cb83dc) Co-authored-by: Sam Gross --- Lib/zoneinfo/_zoneinfo.py | 6 +++++- .../2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2025-12-18-00-00-00.gh-issue-142763.AJpZPVG5.rst diff --git a/Lib/zoneinfo/_zoneinfo.py b/Lib/zoneinfo/_zoneinfo.py index 3ffdb4c837192b..bd3fefc6c9d959 100644 --- a/Lib/zoneinfo/_zoneinfo.py +++ b/Lib/zoneinfo/_zoneinfo.py @@ -47,7 +47,11 @@ def __new__(cls, key): 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 00000000000000..a5330365e3e42e --- /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`.