From: Sam Gross Date: Fri, 3 May 2024 22:16:45 +0000 (-0400) Subject: gh-118527: Intern filename, name, and qualname in code objects. (#118558) X-Git-Tag: v3.13.0b1~123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37c31bea72fb6971f1008faa2e253d12167c221f;p=thirdparty%2FPython%2Fcpython.git gh-118527: Intern filename, name, and qualname in code objects. (#118558) This interns the strings for `co_filename`, `co_name`, and `co_qualname` on codeobjects in the free-threaded build. This partially addresses a reference counting bottleneck when creating closures concurrently. The closures take the name and qualified name from the code object. --- diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 7d02b038cf52..15d3960fc2df 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -390,6 +390,11 @@ init_code(PyCodeObject *co, struct _PyCodeConstructor *con) co->co_filename = Py_NewRef(con->filename); co->co_name = Py_NewRef(con->name); co->co_qualname = Py_NewRef(con->qualname); +#ifdef Py_GIL_DISABLED + PyUnicode_InternInPlace(&co->co_filename); + PyUnicode_InternInPlace(&co->co_name); + PyUnicode_InternInPlace(&co->co_qualname); +#endif co->co_flags = con->flags; co->co_firstlineno = con->firstlineno;