8000 freelist for range iterators · python/cpython@2551f29 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit 2551f29

Browse files
committed
freelist for range iterators
1 parent 64be6c4 commit 2551f29

File tree

6 files changed

+8
-6
lines changed

6 files changed

+8
-6
lines changed

Include/internal/pycore_freelist_state.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ extern "C" {
1717
# define Py_ints_MAXFREELIST 100
1818
# define Py_slices_MAXFREELIST 1
1919
# define Py_ranges_MAXFREELIST 10
20+
# define Py_range_iters_MAXFREELIST 10
2021
# define Py_shared_iters_MAXFREELIST 24
2122
# define Py_class_method_MAXFREELIST 10
2223
# define Py_contexts_MAXFREELIST 255
@@ -46,6 +47,7 @@ struct _Py_freelists {
4647
struct _Py_freelist dictkeys;
4748
struct _Py_freelist slices;
4849
struct _Py_freelist ranges;
50+
struct _Py_freelist range_iters;
4951
struct _Py_freelist shared_iters;
5052
struct _Py_freelist class_method;
5153
struct _Py_freelist contexts;

Objects/iterobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ PySeqIter_New(PyObject *seq)
2323
return NULL;
2424
}
2525

26-
it = _Py_FREELIST_POP(seqiterobject, shared_iters);
26+
it = 0; //_Py_FREELIST_POP(seqiterobject, shared_iters);
2727
if (it == NULL) {
2828
it = PyObject_GC_New(seqiterobject, &PySeqIter_Type);
2929
if (it == NULL)

Objects/listobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3914,7 +3914,7 @@ list_iter(PyObject *seq)
39143914
PyErr_BadInternalCall();
39153915
return NULL;
39163916
}
3917-
_PyListIterObject *it = _Py_FREELIST_POP(_PyListIterObject, shared_iters);
3917+
_PyListIterObject *it = 0; //_Py_FREELIST_POP(_PyListIterObject, shared_iters);
39183918
if (it == NULL) {
39193919
it = PyObject_GC_New(_PyListIterObject, &PyListIter_Type);
39203920
if (it == NULL) {

Objects/object.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,7 @@ _PyObject_ClearFreeLists(struct _Py_freelists *freelists, int is_finalization)
939939
clear_freelist(&freelists->ints, is_finalization, free_object);
940940
clear_freelist(&freelists->shared_iters, is_finalization, free_object);
941941
clear_freelist(&freelists->ranges, is_finalization, free_object);
942+
clear_freelist(&freelists->range_iters, is_finalization, free_object);
942943
clear_freelist(&freelists->class_method, is_finalization, free_object);
943944
}
944945

Objects/rangeobject.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -886,7 +886,7 @@ rangeiter_setstate(_PyRangeIterObject *r, PyObject *state)
886886
static void
887887
rangeiter_dealloc(_PyRangeIterObject *r)
888888
{
889-
_Py_FREELIST_FREE(shared_iters, r, PyObject_Free);
889+
_Py_FREELIST_FREE(range_iters, r, PyObject_Free);
890890
}
891891

892892
PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
@@ -969,15 +969,14 @@ get_len_of_range(long lo, long hi, long step)
969969
static PyObject *
970970
fast_range_iter(long start, long stop, long step, long len)
971971
{
972-
_PyRangeIterObject *it = _Py_FREELIST_POP(_PyRangeIterObject, shared_iters);
972+
_PyRangeIterObject *it = _Py_FREELIST_POP(_PyRangeIterObject, range_iters);
973973
if (it == NULL) {
974974
it = PyObject_New(_PyRangeIterObject, &PyRangeIter_Type);
975975
if (it == NULL)
976976
return NULL;
977977
}
978978
else {
979979
Py_SET_TYPE(it, &PyRangeIter_Type);
980-
//_PyObject_GC_TRACK(it); // need to track with GC again
981980
}
982981
it->start = start;
983982
it->step = step;

Objects/tupleobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,7 @@ tuple_iter(PyObject *seq)
11231123
PyErr_BadInternalCall();
11241124
return NULL;
11251125
}
1126-
it = _Py_FREELIST_POP(_PyTupleIterObject, shared_iters);
1126+
it = 0; // _Py_FREELIST_POP(_PyTupleIterObject, shared_iters);
11271127

11281128
if (it == NULL) {
11291129
it = PyObject_GC_New(_PyTupleIterObject, &PyTupleIter_Type);

0 commit comments

Comments
 (0)
0