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.
This commit is contained in:
Bastien Montagne 2016-07-11 16:50:59 +02:00
parent 4569e19b83
commit 62ea383622
7 changed files with 10 additions and 10 deletions

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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)) {

View File

@ -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 {

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);