mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-03-24 20:14:13 +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"))
|
if (!PyArg_ParseTuple(args, ":_clear_cache"))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
ImagingMemoryClearCache(&ImagingDefaultArena);
|
ImagingMemoryClearCache(&ImagingDefaultArena, 0);
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
|
|
|
@ -172,7 +172,7 @@ typedef struct ImagingMemoryArena {
|
||||||
|
|
||||||
extern struct ImagingMemoryArena ImagingDefaultArena;
|
extern struct ImagingMemoryArena ImagingDefaultArena;
|
||||||
extern int ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max);
|
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 ImagingNew(const char* mode, int xsize, int ysize);
|
||||||
extern Imaging ImagingNewDirty(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;
|
void *p;
|
||||||
/* Free already cached blocks */
|
/* Free already cached blocks */
|
||||||
while (arena->blocks_cached > blocks_max) {
|
ImagingMemoryClearCache(arena, blocks_max);
|
||||||
arena->blocks_cached -= 1;
|
|
||||||
free(arena->blocks[arena->blocks_cached]);
|
|
||||||
arena->stats_freed_blocks += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (blocks_max == 0 && arena->blocks != NULL) {
|
if (blocks_max == 0 && arena->blocks != NULL) {
|
||||||
free(arena->blocks);
|
free(arena->blocks);
|
||||||
|
@ -297,8 +293,6 @@ ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max)
|
||||||
} else {
|
} else {
|
||||||
arena->blocks = calloc(sizeof(void*), blocks_max);
|
arena->blocks = calloc(sizeof(void*), blocks_max);
|
||||||
if ( ! arena->blocks) {
|
if ( ! arena->blocks) {
|
||||||
// Fallback to 0
|
|
||||||
arena->blocks_max = 0;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -308,9 +302,9 @@ ImagingMemorySetBlocksMax(ImagingMemoryArena arena, int blocks_max)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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;
|
arena->blocks_cached -= 1;
|
||||||
free(arena->blocks[arena->blocks_cached]);
|
free(arena->blocks[arena->blocks_cached]);
|
||||||
arena->stats_freed_blocks += 1;
|
arena->stats_freed_blocks += 1;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user