Skip to content

Commit 2c3bbcd

Browse files
colesburynascheme
authored andcommitted
[3.14] gh-149162: Use _Py_LOCK_DONT_DETACH in intern_common (gh-149164)
Avoids potential deadlocks with C++ static local initialization in extensions that call PyUnicode_InternFromString during one-time initialization. (cherry picked from commit f62050d) Co-authored-by: Sam Gross <colesbury@gmail.com>
1 parent 9b33b25 commit 2c3bbcd

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Fix a potential deadlock in :c:func:`PyUnicode_InternFromString` and other
2+
interning functions in the :term:`free-threaded build` when called from C++
3+
static local initializers.

Objects/unicodeobject.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ NOTE: In the interpreter's initialization phase, some globals are currently
113113
#endif
114114

115115
#ifdef Py_GIL_DISABLED
116-
# define LOCK_INTERNED(interp) PyMutex_Lock(&_Py_INTERP_CACHED_OBJECT(interp, interned_mutex))
116+
# define LOCK_INTERNED(interp) \
117+
PyMutex_LockFlags(&_Py_INTERP_CACHED_OBJECT(interp, interned_mutex), \
118+
_Py_LOCK_DONT_DETACH)
117119
# define UNLOCK_INTERNED(interp) PyMutex_Unlock(&_Py_INTERP_CACHED_OBJECT(interp, interned_mutex))
118120
#else
119121
# define LOCK_INTERNED(interp)

0 commit comments

Comments
 (0)