[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44269] trunk/blender/source/blender: fix harmless but annoying memory leak prints, "newmem", now free all scanfill memory on exit.

Campbell Barton ideasman42 at gmail.com
Sun Feb 19 23:36:38 CET 2012


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




More information about the Bf-blender-cvs mailing list