summaryrefslogtreecommitdiffstats
path: root/Objects/listobject.c
diff options
context:
space:
mode:
authorDonghee Na <donghee.na@python.org>2024-05-21 13:49:18 (GMT)
committerGitHub <noreply@github.com>2024-05-21 13:49:18 (GMT)
commitab4263a82abe8b684d8ad1edf7c7c6ec286ff756 (patch)
treea2a700e3973cc1ef0835be0e0e4393fad214513a /Objects/listobject.c
parent73f4a58d36b65ec650e8f00b2affc4a4d3195f0c (diff)
downloadcpython-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.c15
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;
}