mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-03-13 09:15:46 +03:00
reduce code duplication
This commit is contained in:
parent
2ab19bbe44
commit
3bfdfcd48a
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user