From 32f2eda85957365d208f499b730d30b7eb419741 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 23 Jun 2020 06:50:15 -0700 Subject: [PATCH] bpo-40521: Remove freelist from collections.deque() (GH-21073) --- .../2020-06-23-06-09-59.bpo-40521.HUfxP7.rst | 1 + Modules/_collectionsmodule.c | 23 ++----------------- 2 files changed, 3 insertions(+), 21 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2020-06-23-06-09-59.bpo-40521.HUfxP7.rst diff --git a/Misc/NEWS.d/next/Library/2020-06-23-06-09-59.bpo-40521.HUfxP7.rst b/Misc/NEWS.d/next/Library/2020-06-23-06-09-59.bpo-40521.HUfxP7.rst new file mode 100644 index 00000000000..7689a1470b0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-06-23-06-09-59.bpo-40521.HUfxP7.rst @@ -0,0 +1 @@ +Remove freelist from collections.deque(). diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 7120e4dda0e..00198ff3eb7 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -117,23 +117,9 @@ static PyTypeObject deque_type; #define CHECK_NOT_END(link) #endif -/* A simple freelisting scheme is used to minimize calls to the memory - allocator. It accommodates common use cases where new blocks are being - added at about the same rate as old blocks are being freed. - */ - -#define MAXFREEBLOCKS 16 -static Py_ssize_t numfreeblocks = 0; -static block *freeblocks[MAXFREEBLOCKS]; - static block * newblock(void) { - block *b; - if (numfreeblocks) { - numfreeblocks--; - return freeblocks[numfreeblocks]; - } - b = PyMem_Malloc(sizeof(block)); + block *b = PyMem_Malloc(sizeof(block)); if (b != NULL) { return b; } @@ -144,12 +130,7 @@ newblock(void) { static void freeblock(block *b) { - if (numfreeblocks < MAXFREEBLOCKS) { - freeblocks[numfreeblocks] = b; - numfreeblocks++; - } else { - PyMem_Free(b); - } + PyMem_Free(b); } static PyObject *