Revision: 44269 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44269 Author: campbellbarton Date: 2012-02-19 22:36:24 +0000 (Sun, 19 Feb 2012) Log Message: ----------- fix harmless but annoying memory leak prints, "newmem", now free all scanfill memory on exit.
Modified Paths: -------------- trunk/blender/source/blender/blenlib/BLI_scanfill.h trunk/blender/source/blender/blenlib/intern/scanfill.c trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c Modified: trunk/blender/source/blender/blenlib/BLI_scanfill.h =================================================================== --- trunk/blender/source/blender/blenlib/BLI_scanfill.h 2012-02-19 22:28:50 UTC (rev 44268) +++ trunk/blender/source/blender/blenlib/BLI_scanfill.h 2012-02-19 22:36:24 UTC (rev 44269) @@ -109,6 +109,8 @@ */ void BLI_setInterruptCallBack(int (*f)(void)); +void BLI_scanfill_free(void); + #ifdef __cplusplus } #endif Modified: trunk/blender/source/blender/blenlib/intern/scanfill.c =================================================================== --- trunk/blender/source/blender/blenlib/intern/scanfill.c 2012-02-19 22:28:50 UTC (rev 44268) +++ trunk/blender/source/blender/blenlib/intern/scanfill.c 2012-02-19 22:36:24 UTC (rev 44269) @@ -143,7 +143,7 @@ free in the end, with argument '-1' */ #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 ListBase melem__lb= {NULL, NULL}; @@ -167,13 +167,14 @@ return melem__cur->data; } } -static void mem_element_reset(void) +static void mem_element_reset(int keep_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 */ - BLI_remlink(&melem__lb, first); + if (keep_first) { + BLI_remlink(&melem__lb, first); + } melem__cur= melem__lb.first; while(melem__cur) { @@ -183,8 +184,14 @@ BLI_freelistN(&melem__lb); /*reset the block we're keeping*/ - BLI_addtail(&melem__lb, first); - memset(first->data, 0, MEM_ELEM_BLOCKSIZE); + if (keep_first) { + BLI_addtail(&melem__lb, first); + memset(first->data, 0, MEM_ELEM_BLOCKSIZE); + } + else { + first = NULL; + + } } melem__cur= first; @@ -193,7 +200,7 @@ void BLI_end_edgefill(void) { - mem_element_reset(); + mem_element_reset(TRUE); fillvertbase.first= fillvertbase.last= 0; filledgebase.first= filledgebase.last= 0; @@ -202,6 +209,11 @@ BLI_unlock_thread(LOCK_SCANFILL); } +void BLI_scanfill_free(void) +{ + mem_element_reset(FALSE); +} + /* **** FILL ROUTINES *************************** */ ScanFillVert *BLI_addfillvert(const float vec[3]) Modified: trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c =================================================================== --- trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c 2012-02-19 22:28:50 UTC (rev 44268) +++ trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c 2012-02-19 22:36:24 UTC (rev 44269) @@ -63,6 +63,7 @@ #include "BKE_tracking.h" /* free tracking clipboard */ #include "BLI_listbase.h" +#include "BLI_scanfill.h" #include "BLI_string.h" #include "BLI_utildefines.h" @@ -387,6 +388,8 @@ BLF_exit(); + BLI_scanfill_free(); /* the order this is called doesn't matter */ + #ifdef WITH_INTERNATIONAL BLF_free_unifont(); #endif _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs