[Bf-blender-cvs] [62ea383] master: Fix (unreported) memory leak when making local linked databock which has a preview image.

Bastien Montagne noreply at git.blender.org
Mon Jul 11 22:35:10 CEST 2016


Commit: 62ea383622d8cb9ae284217bd040d93a6d123859
Author: Bastien Montagne
Date:   Mon Jul 11 16:50:59 2016 +0200
Branches: master
https://developer.blender.org/rB62ea383622d8cb9ae284217bd040d93a6d123859

Fix (unreported) memory leak when making local linked databock which has a preview image.

Also cleaned-up/synchronized code across al ID types that support preview.

===================================================================

M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/lamp.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/texture.c
M	source/blender/blenkernel/intern/world.c

===================================================================

diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 587912c..5c223d8 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -459,6 +459,8 @@ Image *BKE_image_copy(Main *bmain, Image *ima)
 	nima->stereo3d_format = MEM_dupallocN(ima->stereo3d_format);
 	BLI_duplicatelist(&nima->views, &ima->views);
 
+	nima->preview = BKE_previewimg_copy(ima->preview);
+
 	if (ID_IS_LINKED_DATABLOCK(ima)) {
 		BKE_id_lib_local_paths(bmain, ima->id.lib, &nima->id);
 	}
diff --git a/source/blender/blenkernel/intern/lamp.c b/source/blender/blenkernel/intern/lamp.c
index 36ba5db..3e656a2 100644
--- a/source/blender/blenkernel/intern/lamp.c
+++ b/source/blender/blenkernel/intern/lamp.c
@@ -167,8 +167,8 @@ Lamp *localize_lamp(Lamp *la)
 	if (la->nodetree)
 		lan->nodetree = ntreeLocalize(la->nodetree);
 	
-	lan->preview = NULL;
-	
+	lan->preview = BKE_previewimg_copy(la->preview);
+
 	return lan;
 }
 
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index bd476cc..3e29a9e 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -239,12 +239,12 @@ Material *BKE_material_copy(Main *bmain, Material *ma)
 	if (ma->ramp_col) man->ramp_col = MEM_dupallocN(ma->ramp_col);
 	if (ma->ramp_spec) man->ramp_spec = MEM_dupallocN(ma->ramp_spec);
 	
-	if (ma->preview) man->preview = BKE_previewimg_copy(ma->preview);
-
 	if (ma->nodetree) {
 		man->nodetree = ntreeCopyTree(bmain, ma->nodetree);
 	}
 
+	man->preview = BKE_previewimg_copy(ma->preview);
+
 	BLI_listbase_clear(&man->gpumaterial);
 	
 	if (ID_IS_LINKED_DATABLOCK(ma)) {
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 4031afb..1a01cc2 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1219,7 +1219,6 @@ void BKE_object_make_local(Main *bmain, Object *ob)
 	if (is_local) {
 		if (!is_lib) {
 			id_clear_lib_data(bmain, &ob->id);
-			ob->preview = NULL;
 			extern_local_object(ob);
 		}
 		else {
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index c071aac..858b6bd 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -344,9 +344,7 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
 		}
 	}
 
-	if (sce->preview) {
-		scen->preview = BKE_previewimg_copy(sce->preview);
-	}
+	scen->preview = BKE_previewimg_copy(sce->preview);
 
 	return scen;
 }
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index aee0efe..459b6f9 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -876,6 +876,8 @@ Tex *BKE_texture_copy(Main *bmain, Tex *tex)
 		BKE_id_lib_local_paths(bmain, tex->id.lib, &texn->id);
 	}
 
+	texn->preview = BKE_previewimg_copy(tex->preview);
+
 	return texn;
 }
 
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index d62ecb5..69e89fc 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -138,8 +138,7 @@ World *BKE_world_copy(Main *bmain, World *wrld)
 		wrldn->nodetree = ntreeCopyTree(bmain, wrld->nodetree);
 	}
 	
-	if (wrld->preview)
-		wrldn->preview = BKE_previewimg_copy(wrld->preview);
+	wrldn->preview = BKE_previewimg_copy(wrld->preview);
 
 	BLI_listbase_clear(&wrldn->gpumaterial);




More information about the Bf-blender-cvs mailing list