diff options
author | Donghee Na <donghee.na@python.org> | 2024-05-21 13:49:18 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-21 13:49:18 (GMT) |
commit | ab4263a82abe8b684d8ad1edf7c7c6ec286ff756 (patch) | |
tree | a2a700e3973cc1ef0835be0e0e4393fad214513a /Objects/listobject.c | |
parent | 73f4a58d36b65ec650e8f00b2affc4a4d3195f0c (diff) | |
download | cpython-ab4263a82abe8b684d8ad1edf7c7c6ec286ff756.zip cpython-ab4263a82abe8b684d8ad1edf7c7c6ec286ff756.tar.gz cpython-ab4263a82abe8b684d8ad1edf7c7c6ec286ff756.tar.bz2 |
gh-119053: Implement the fast path for list.__getitem__ (gh-119112)
Diffstat (limited to 'Objects/listobject.c')
-rw-r--r-- | Objects/listobject.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c index 7070165..d09bb63 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -351,7 +351,11 @@ list_item_impl(PyListObject *self, Py_ssize_t idx) if (!valid_index(idx, size)) { goto exit; } +#ifdef Py_GIL_DISABLED + item = _Py_NewRefWithLock(self->ob_item[idx]); +#else item = Py_NewRef(self->ob_item[idx]); +#endif exit: Py_END_CRITICAL_SECTION(); return item; @@ -656,14 +660,15 @@ list_item(PyObject *aa, Py_ssize_t i) return NULL; } PyObject *item; - Py_BEGIN_CRITICAL_SECTION(a); #ifdef Py_GIL_DISABLED - if (!_Py_IsOwnedByCurrentThread((PyObject *)a) && !_PyObject_GC_IS_SHARED(a)) { - _PyObject_GC_SET_SHARED(a); + item = list_get_item_ref(a, i); + if (item == NULL) { + PyErr_SetObject(PyExc_IndexError, &_Py_STR(list_err)); + return NULL; } -#endif +#else item = Py_NewRef(a->ob_item[i]); - Py_END_CRITICAL_SECTION(); +#endif return item; } |