mirror of
https://github.com/python/cpython.git
synced 2025-10-15 03:10:29 +00:00
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.
This commit is contained in:
parent
d3c76dff44
commit
f4997bb3ac
17 changed files with 143 additions and 137 deletions
|
@ -2384,10 +2384,11 @@ sys__getframemodulename_impl(PyObject *module, int depth)
|
|||
while (f && (_PyFrame_IsIncomplete(f) || depth-- > 0)) {
|
||||
f = f->previous;
|
||||
}
|
||||
if (f == NULL || f->f_funcobj == NULL) {
|
||||
if (f == NULL || PyStackRef_IsNull(f->f_funcobj)) {
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
PyObject *r = PyFunction_GetModule(f->f_funcobj);
|
||||
PyObject *func = PyStackRef_AsPyObjectBorrow(f->f_funcobj);
|
||||
PyObject *r = PyFunction_GetModule(func);
|
||||
if (!r) {
|
||||
PyErr_Clear();
|
||||
r = Py_None;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue