[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50542] trunk/blender/source/blender/ editors/object/object_bake.c: fix memory leak when baking feedback loop detected.

Campbell Barton ideasman42 at gmail.com
Wed Sep 12 05:11:31 CEST 2012


Revision: 50542
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50542
Author:   campbellbarton
Date:     2012-09-12 03:11:29 +0000 (Wed, 12 Sep 2012)
Log Message:
-----------
fix memory leak when baking feedback loop detected.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_bake.c

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2012-09-12 03:05:20 UTC (rev 50541)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2012-09-12 03:11:29 UTC (rev 50542)
@@ -1347,6 +1347,8 @@
 
 static void finish_bake_internal(BakeRender *bkr)
 {
+	Image *ima;
+
 	RE_Database_Free(bkr->re);
 
 	/* restore raytrace and AO */
@@ -1358,26 +1360,27 @@
 		if (bkr->prev_r_raytrace == 0)
 			bkr->scene->r.mode &= ~R_RAYTRACE;
 
-	if (bkr->result == BAKE_RESULT_OK) {
-		Image *ima;
-		/* force OpenGL reload and mipmap recalc */
-		for (ima = G.main->image.first; ima; ima = ima->id.next) {
+
+	/* force OpenGL reload and mipmap recalc */
+	for (ima = G.main->image.first; ima; ima = ima->id.next) {
+		ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL);
+
+		if (bkr->result == BAKE_RESULT_OK) {
 			if (ima->ok == IMA_OK_LOADED) {
-				ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL);
 				if (ibuf) {
 					if (ibuf->userflags & IB_BITMAPDIRTY) {
 						GPU_free_image(ima);
 						imb_freemipmapImBuf(ibuf);
 					}
-
-					/* freed when baking is done, but if its canceled we need to free here */
-					if (ibuf->userdata) {
-						MEM_freeN(ibuf->userdata);
-						ibuf->userdata = NULL;
-					}
 				}
 			}
 		}
+
+		/* freed when baking is done, but if its canceled we need to free here */
+		if (ibuf->userdata) {
+			MEM_freeN(ibuf->userdata);
+			ibuf->userdata = NULL;
+		}
 	}
 }
 




More information about the Bf-blender-cvs mailing list