forked from bartvdbraak/blender
fix harmless but annoying memory leak prints, "newmem", now free all scanfill memory on exit.
This commit is contained in:
parent
a368e6771a
commit
1cad189e32
@ -109,6 +109,8 @@ void BLI_setErrorCallBack(void (*f)(const char*));
|
|||||||
*/
|
*/
|
||||||
void BLI_setInterruptCallBack(int (*f)(void));
|
void BLI_setInterruptCallBack(int (*f)(void));
|
||||||
|
|
||||||
|
void BLI_scanfill_free(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -143,7 +143,7 @@ struct mem_elements {
|
|||||||
free in the end, with argument '-1'
|
free in the end, with argument '-1'
|
||||||
*/
|
*/
|
||||||
#define MEM_ELEM_BLOCKSIZE 16384
|
#define MEM_ELEM_BLOCKSIZE 16384
|
||||||
static struct mem_elements * melem__cur= 0;
|
static struct mem_elements * melem__cur= NULL;
|
||||||
static int melem__offs= 0; /* the current free address */
|
static int melem__offs= 0; /* the current free address */
|
||||||
static ListBase melem__lb= {NULL, NULL};
|
static ListBase melem__lb= {NULL, NULL};
|
||||||
|
|
||||||
@ -167,13 +167,14 @@ static void *mem_element_new(int size)
|
|||||||
return melem__cur->data;
|
return melem__cur->data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void mem_element_reset(void)
|
static void mem_element_reset(int keep_first)
|
||||||
{
|
{
|
||||||
struct mem_elements *first;
|
struct mem_elements *first;
|
||||||
/*BMESH_TODO: keep the first block, gives memory leak on exit with 'newmem' */
|
|
||||||
|
|
||||||
if((first= melem__lb.first)) { /* can be false if first fill fails */
|
if((first= melem__lb.first)) { /* can be false if first fill fails */
|
||||||
BLI_remlink(&melem__lb, first);
|
if (keep_first) {
|
||||||
|
BLI_remlink(&melem__lb, first);
|
||||||
|
}
|
||||||
|
|
||||||
melem__cur= melem__lb.first;
|
melem__cur= melem__lb.first;
|
||||||
while(melem__cur) {
|
while(melem__cur) {
|
||||||
@ -183,8 +184,14 @@ static void mem_element_reset(void)
|
|||||||
BLI_freelistN(&melem__lb);
|
BLI_freelistN(&melem__lb);
|
||||||
|
|
||||||
/*reset the block we're keeping*/
|
/*reset the block we're keeping*/
|
||||||
BLI_addtail(&melem__lb, first);
|
if (keep_first) {
|
||||||
memset(first->data, 0, MEM_ELEM_BLOCKSIZE);
|
BLI_addtail(&melem__lb, first);
|
||||||
|
memset(first->data, 0, MEM_ELEM_BLOCKSIZE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
first = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
melem__cur= first;
|
melem__cur= first;
|
||||||
@ -193,7 +200,7 @@ static void mem_element_reset(void)
|
|||||||
|
|
||||||
void BLI_end_edgefill(void)
|
void BLI_end_edgefill(void)
|
||||||
{
|
{
|
||||||
mem_element_reset();
|
mem_element_reset(TRUE);
|
||||||
|
|
||||||
fillvertbase.first= fillvertbase.last= 0;
|
fillvertbase.first= fillvertbase.last= 0;
|
||||||
filledgebase.first= filledgebase.last= 0;
|
filledgebase.first= filledgebase.last= 0;
|
||||||
@ -202,6 +209,11 @@ void BLI_end_edgefill(void)
|
|||||||
BLI_unlock_thread(LOCK_SCANFILL);
|
BLI_unlock_thread(LOCK_SCANFILL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BLI_scanfill_free(void)
|
||||||
|
{
|
||||||
|
mem_element_reset(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
/* **** FILL ROUTINES *************************** */
|
/* **** FILL ROUTINES *************************** */
|
||||||
|
|
||||||
ScanFillVert *BLI_addfillvert(const float vec[3])
|
ScanFillVert *BLI_addfillvert(const float vec[3])
|
||||||
|
@ -63,6 +63,7 @@
|
|||||||
#include "BKE_tracking.h" /* free tracking clipboard */
|
#include "BKE_tracking.h" /* free tracking clipboard */
|
||||||
|
|
||||||
#include "BLI_listbase.h"
|
#include "BLI_listbase.h"
|
||||||
|
#include "BLI_scanfill.h"
|
||||||
#include "BLI_string.h"
|
#include "BLI_string.h"
|
||||||
#include "BLI_utildefines.h"
|
#include "BLI_utildefines.h"
|
||||||
|
|
||||||
@ -387,6 +388,8 @@ void WM_exit_ext(bContext *C, const short do_python)
|
|||||||
|
|
||||||
BLF_exit();
|
BLF_exit();
|
||||||
|
|
||||||
|
BLI_scanfill_free(); /* the order this is called doesn't matter */
|
||||||
|
|
||||||
#ifdef WITH_INTERNATIONAL
|
#ifdef WITH_INTERNATIONAL
|
||||||
BLF_free_unifont();
|
BLF_free_unifont();
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user