diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2016-07-11 17:50:59 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2016-07-11 22:30:02 +0300 |
commit | 62ea383622d8cb9ae284217bd040d93a6d123859 (patch) | |
tree | f70e908b2519c2e5f73d68ae66641ff73432fe19 /source/blender/blenkernel/intern | |
parent | 4569e19b83894218257e04976df34662fed7a381 (diff) |
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.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/image.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/lamp.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/material.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/texture.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/world.c | 3 |
7 files changed, 10 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 587912c8fed..5c223d824ef 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 36ba5dbb09b..3e656a2433d 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 bd476ccc9c7..3e29a9e91de 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 4031afb8a78..1a01cc2da62 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 c071aacc64b..858b6bd927b 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 aee0efeab58..459b6f94d5e 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 d62ecb5c9cf..69e89fc9171 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); |