From: Dino Viehland Date: Mon, 29 Jan 2024 17:47:54 +0000 (-0800) Subject: gh-112075: Dictionary global version counter should use atomic increments (#114568) X-Git-Tag: v3.13.0a4~269 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0cd9bacb8ad41fe86f95b326e9199caa749539eb;p=thirdparty%2FPython%2Fcpython.git gh-112075: Dictionary global version counter should use atomic increments (#114568) Dictionary global version counter should use atomic increments --- diff --git a/Include/internal/pycore_dict.h b/Include/internal/pycore_dict.h index d96870e9197b..b4e1f8cf1e32 100644 --- a/Include/internal/pycore_dict.h +++ b/Include/internal/pycore_dict.h @@ -209,8 +209,14 @@ static inline PyDictUnicodeEntry* DK_UNICODE_ENTRIES(PyDictKeysObject *dk) { #define DICT_VERSION_INCREMENT (1 << DICT_MAX_WATCHERS) #define DICT_VERSION_MASK (DICT_VERSION_INCREMENT - 1) +#ifdef Py_GIL_DISABLED +#define DICT_NEXT_VERSION(INTERP) \ + (_Py_atomic_add_uint64(&(INTERP)->dict_state.global_version, DICT_VERSION_INCREMENT) + DICT_VERSION_INCREMENT) + +#else #define DICT_NEXT_VERSION(INTERP) \ ((INTERP)->dict_state.global_version += DICT_VERSION_INCREMENT) +#endif void _PyDict_SendEvent(int watcher_bits,