gh-123923: Defer refcounting for f_executable in _PyInterpreterFrame (#123924)
Use a `_PyStackRef` and defer the reference to `f_executable` 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:
@@ -250,7 +250,7 @@ hashtable_compare_traceback(const void *key1, const void *key2)
|
||||
static void
|
||||
tracemalloc_get_frame(_PyInterpreterFrame *pyframe, frame_t *frame)
|
||||
{
|
||||
assert(PyCode_Check(pyframe->f_executable));
|
||||
assert(PyStackRef_CodeCheck(pyframe->f_executable));
|
||||
frame->filename = &_Py_STR(anon_unknown);
|
||||
int lineno = PyUnstable_InterpreterFrame_GetLine(pyframe);
|
||||
if (lineno < 0) {
|
||||
@@ -258,7 +258,7 @@ tracemalloc_get_frame(_PyInterpreterFrame *pyframe, frame_t *frame)
|
||||
}
|
||||
frame->lineno = (unsigned int)lineno;
|
||||
|
||||
PyObject *filename = filename = ((PyCodeObject *)pyframe->f_executable)->co_filename;
|
||||
PyObject *filename = filename = _PyFrame_GetCode(pyframe)->co_filename;
|
||||
|
||||
if (filename == NULL) {
|
||||
#ifdef TRACE_DEBUG
|
||||
|
||||
Reference in New Issue
Block a user