From db08235c05eabcd5e0d98817afbbe0f09adbe6e1 Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 19 Sep 2017 00:14:44 +0300 Subject: [PATCH] reduce size of blocks returned to pool --- _imaging.c | 2 +- libImaging/Storage.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/_imaging.c b/_imaging.c index ddbc303f8..acba91bfd 100644 --- a/_imaging.c +++ b/_imaging.c @@ -3473,7 +3473,7 @@ _set_blocks_max(PyObject* self, PyObject* args) static PyObject* _clear_cache(PyObject* self, PyObject* args) { - if (!PyArg_ParseTuple(args, ":_clear_cache")) + if (!PyArg_ParseTuple(args, ":clear_cache")) return NULL; ImagingMemoryClearCache(&ImagingDefaultArena, 0); diff --git a/libImaging/Storage.c b/libImaging/Storage.c index 7f12088a1..e3084a079 100644 --- a/libImaging/Storage.c +++ b/libImaging/Storage.c @@ -353,6 +353,11 @@ void memory_return_block(ImagingMemoryArena arena, ImagingMemoryBlock block) { if (arena->blocks_cached < arena->blocks_max) { + // Reduce block size + if (block.size > arena->block_size) { + block.size = arena->block_size; + block.ptr = realloc(block.ptr, arena->block_size); + } arena->blocks[arena->blocks_cached] = block; arena->blocks_cached += 1; } else {