From: Sam Gross Date: Fri, 10 Jan 2025 00:59:10 +0000 (-0500) Subject: gh-128691: Use deferred reference counting on `_thread._local` (#128693) X-Git-Tag: v3.14.0a4~52 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c1417487e98e270d614965ed78ff9439044b65a6;p=thirdparty%2FPython%2Fcpython.git gh-128691: Use deferred reference counting on `_thread._local` (#128693) This change, along with the LOAD_ATTR specializations, makes the "thread_local_read" micro benchmark in Tools/ftscalingbench/ftscalingbench.py scale well to multiple threads. --- diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 2cbdfeb09b95..d19ae326bd6b 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -1414,6 +1414,10 @@ local_new(PyTypeObject *type, PyObject *args, PyObject *kw) return NULL; } + // gh-128691: Use deferred reference counting for thread-locals to avoid + // contention on the shared object. + _PyObject_SetDeferredRefcount((PyObject *)self); + self->args = Py_XNewRef(args); self->kw = Py_XNewRef(kw);