Skip to content

Commit

Permalink
gh-119053: Implement the fast path for list.__getitem__ (gh-119112)
Browse files Browse the repository at this point in the history
  • Loading branch information
corona10 authored May 21, 2024
1 parent 73f4a58 commit ab4263a
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions Objects/listobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit ab4263a

Please sign in to comment.