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

Reply via email to