aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/optimizer.c
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-09-24 13:08:18 -0700
committerGitHub <noreply@github.com>2024-09-24 20:08:18 +0000
commitf4997bb3ac961d6aaf07ce650cd074e28ce6ccd0 (patch)
tree6c82b0fadd282e74c8f81de4a3966666fd210196 /Python/optimizer.c
parentd3c76dff444046504754a437dceebc9a9c87ef18 (diff)
downloadcpython-f4997bb3ac961d6aaf07ce650cd074e28ce6ccd0.tar.gz
cpython-f4997bb3ac961d6aaf07ce650cd074e28ce6ccd0.zip
gh-123923: Defer refcounting for `f_funcobj` in `_PyInterpreterFrame` (#124026)
Use a `_PyStackRef` and defer the reference to `f_funcobj` when possible. This avoids some reference count contention in the common case of executing the same code object from multiple threads concurrently in the free-threaded build.
Diffstat (limited to 'Python/optimizer.c')
-rw-r--r--Python/optimizer.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/Python/optimizer.c b/Python/optimizer.c
index 9198e410627..bb7a90b3204 100644
--- a/Python/optimizer.c
+++ b/Python/optimizer.c
@@ -533,7 +533,7 @@ translate_bytecode_to_trace(
{
bool first = true;
PyCodeObject *code = _PyFrame_GetCode(frame);
- PyFunctionObject *func = (PyFunctionObject *)frame->f_funcobj;
+ PyFunctionObject *func = _PyFrame_GetFunction(frame);
assert(PyFunction_Check(func));
PyCodeObject *initial_code = code;
_Py_BloomFilter_Add(dependencies, initial_code);