reduce code duplication

This commit is contained in:
Alexander 2017-09-18 03:57:43 +03:00
parent 2ab19bbe44
commit 3bfdfcd48a
3 changed files with 5 additions and 11 deletions

View File

@ -3476,7 +3476,7 @@ _clear_cache(PyObject* self, PyObject* args)
if (!PyArg_ParseTuple(args, ":_clear_cache"))
return NULL;
ImagingMemoryClearCache(&ImagingDefaultArena);
ImagingMemoryClearCache(&ImagingDefaultArena, 0);
Py_INCREF(Py_None);
return Py_None;

View File

@ -172,7 +172,7 @@ typedef struct ImagingMemoryArena {
extern struct ImagingMemoryArena ImagingDefaultArena;
extern int ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max);
extern void ImagingMemoryClearCache(ImagingMemoryArena arena);
extern void ImagingMemoryClearCache(ImagingMemoryArena arena, int new_size);
extern Imaging ImagingNew(const char* mode, int xsize, int ysize);
extern Imaging ImagingNewDirty(const char* mode, int xsize, int ysize);

View File

@ -278,11 +278,7 @@ ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max)
{
void *p;
/* Free already cached blocks */
while (arena->blocks_cached > blocks_max) {
arena->blocks_cached -= 1;
free(arena->blocks[arena->blocks_cached]);
arena->stats_freed_blocks += 1;
}
ImagingMemoryClearCache(arena, blocks_max);
if (blocks_max == 0 && arena->blocks != NULL) {
free(arena->blocks);
@ -297,8 +293,6 @@ ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max)
} else {
arena->blocks = calloc(sizeof(void*), blocks_max);
if ( ! arena->blocks) {
// Fallback to 0
arena->blocks_max = 0;
return 0;
}
}
@ -308,9 +302,9 @@ ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max)
}
void
ImagingMemoryClearCache(ImagingMemoryArena arena)
ImagingMemoryClearCache(ImagingMemoryArena arena, int new_size)
{
while (arena->blocks_cached > 0) {
while (arena->blocks_cached > new_size) {
arena->blocks_cached -= 1;
free(arena->blocks[arena->blocks_cached]);
arena->stats_freed_blocks += 1;