mirror of https://github.com/python/cpython
gh-124642: Dictionaries aren't marking objects as weakref'd (#124643)
Dictionaries aren't marking objects as weakref'd
This commit is contained in:
parent
cce1125574
commit
077e7ef6a0
|
@ -0,0 +1 @@
|
|||
Fixed scalability issue in free-threaded builds for lock-free reads from dictionaries in multi-threaded scenarios
|
|
@ -1488,7 +1488,7 @@ read_failed:
|
|||
*value_addr = value;
|
||||
if (value != NULL) {
|
||||
assert(ix >= 0);
|
||||
Py_INCREF(value);
|
||||
_Py_NewRefWithLock(value);
|
||||
}
|
||||
Py_END_CRITICAL_SECTION();
|
||||
return ix;
|
||||
|
@ -7015,7 +7015,7 @@ _PyObject_TryGetInstanceAttribute(PyObject *obj, PyObject *name, PyObject **attr
|
|||
// Still no dict, we can read from the values
|
||||
assert(values->valid);
|
||||
value = values->values[ix];
|
||||
*attr = Py_XNewRef(value);
|
||||
*attr = _Py_XNewRefWithLock(value);
|
||||
success = true;
|
||||
}
|
||||
|
||||
|
@ -7035,7 +7035,7 @@ _PyObject_TryGetInstanceAttribute(PyObject *obj, PyObject *name, PyObject **attr
|
|||
|
||||
if (dict->ma_values == values && FT_ATOMIC_LOAD_UINT8(values->valid)) {
|
||||
value = _Py_atomic_load_ptr_relaxed(&values->values[ix]);
|
||||
*attr = Py_XNewRef(value);
|
||||
*attr = _Py_XNewRefWithLock(value);
|
||||
success = true;
|
||||
} else {
|
||||
// Caller needs to lookup from the dictionary
|
||||
|
|
Loading…
Reference in New Issue