From 36d338f72c3bc6986bc69bce15b9dd101e654b72 Mon Sep 17 00:00:00 2001 From: Donghee Na Date: Fri, 19 Jan 2024 08:25:13 +0900 Subject: [PATCH] gh-111968: Fix --without-freelists build (gh-114270) --- Objects/sliceobject.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Objects/sliceobject.c b/Objects/sliceobject.c index 9ec8ea8e1b307f8..440c1da30620c38 100644 --- a/Objects/sliceobject.c +++ b/Objects/sliceobject.c @@ -105,16 +105,20 @@ PyObject _Py_EllipsisObject = _PyObject_HEAD_INIT(&PyEllipsis_Type); void _PySlice_ClearCache(_PyFreeListState *state) { +#ifdef WITH_FREELISTS PySliceObject *obj = state->slice_state.slice_cache; if (obj != NULL) { state->slice_state.slice_cache = NULL; PyObject_GC_Del(obj); } +#endif } void _PySlice_Fini(_PyFreeListState *state) { +#ifdef WITH_FREELISTS _PySlice_ClearCache(state); +#endif } /* start, stop, and step are python objects with None indicating no @@ -125,15 +129,17 @@ static PySliceObject * _PyBuildSlice_Consume2(PyObject *start, PyObject *stop, PyObject *step) { assert(start != NULL && stop != NULL && step != NULL); - - _PyFreeListState *state = _PyFreeListState_GET(); PySliceObject *obj; +#ifdef WITH_FREELISTS + _PyFreeListState *state = _PyFreeListState_GET(); if (state->slice_state.slice_cache != NULL) { obj = state->slice_state.slice_cache; state->slice_state.slice_cache = NULL; _Py_NewReference((PyObject *)obj); } - else { + else +#endif + { obj = PyObject_GC_New(PySliceObject, &PySlice_Type); if (obj == NULL) { goto error; @@ -358,15 +364,18 @@ Create a slice object. This is used for extended slicing (e.g. a[0:10:2])."); static void slice_dealloc(PySliceObject *r) { - _PyFreeListState *state = _PyFreeListState_GET(); _PyObject_GC_UNTRACK(r); Py_DECREF(r->step); Py_DECREF(r->start); Py_DECREF(r->stop); +#ifdef WITH_FREELISTS + _PyFreeListState *state = _PyFreeListState_GET(); if (state->slice_state.slice_cache == NULL) { state->slice_state.slice_cache = r; } - else { + else +#endif + { PyObject_GC_Del(r); } }