[Bf-blender-cvs] [dd26620] free-refcount-ids: ID free: freestylelinestyle & other minor types, some cleanups (mostly use MEM_SAFE_FREE where possible).
Bastien Montagne
noreply at git.blender.org
Wed Sep 30 22:00:13 CEST 2015
Commit: dd266202b0e7fb3eb6f7620d4fe988ef10338714
Author: Bastien Montagne
Date: Wed Sep 30 20:52:33 2015 +0200
Branches: free-refcount-ids
https://developer.blender.org/rBdd266202b0e7fb3eb6f7620d4fe988ef10338714
ID free: freestylelinestyle & other minor types, some cleanups (mostly use MEM_SAFE_FREE where possible).
===================================================================
M source/blender/blenkernel/BKE_linestyle.h
M source/blender/blenkernel/BKE_paint.h
M source/blender/blenkernel/BKE_screen.h
M source/blender/blenkernel/intern/curve.c
M source/blender/blenkernel/intern/image.c
M source/blender/blenkernel/intern/lamp.c
M source/blender/blenkernel/intern/lattice.c
M source/blender/blenkernel/intern/library.c
M source/blender/blenkernel/intern/linestyle.c
M source/blender/blenkernel/intern/material.c
M source/blender/blenkernel/intern/mball.c
M source/blender/blenkernel/intern/mesh.c
M source/blender/blenkernel/intern/object.c
M source/blender/blenkernel/intern/paint.c
M source/blender/blenkernel/intern/scene.c
M source/blender/blenkernel/intern/screen.c
M source/blender/blenkernel/intern/texture.c
M source/blender/editors/screen/screen_edit.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_linestyle.h b/source/blender/blenkernel/BKE_linestyle.h
index e77b4f5..49b568a 100644
--- a/source/blender/blenkernel/BKE_linestyle.h
+++ b/source/blender/blenkernel/BKE_linestyle.h
@@ -50,7 +50,8 @@ struct ColorBand;
struct bContext;
FreestyleLineStyle *BKE_linestyle_new(struct Main *bmain, const char *name);
-void BKE_linestyle_free(FreestyleLineStyle *linestyle);
+void BKE_linestyle_release_datablocks(FreestyleLineStyle *linestyle);
+void BKE_linestyle_free(FreestyleLineStyle *linestyle, const bool do_id_user);
FreestyleLineStyle *BKE_linestyle_copy(struct Main *bmain, FreestyleLineStyle *linestyle);
FreestyleLineStyle *BKE_linestyle_active_from_scene(struct Scene *scene);
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index bf1cfb2..a2e59e4 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -97,7 +97,7 @@ void BKE_paint_reset_overlay_invalid(OverlayControlFlags flag);
void BKE_paint_set_overlay_override(enum OverlayFlags flag);
/* palettes */
-void BKE_palette_free(struct Palette *palette);
+void BKE_palette_free(struct Palette *palette, const bool do_id_user);
struct Palette *BKE_palette_add(struct Main *bmain, const char *name);
struct PaletteColor *BKE_palette_color_add(struct Palette *palette);
bool BKE_palette_is_empty(const struct Palette *palette);
@@ -106,7 +106,7 @@ void BKE_palette_clear(struct Palette *palette);
/* paint curves */
struct PaintCurve *BKE_paint_curve_add(struct Main *bmain, const char *name);
-void BKE_paint_curve_free(struct PaintCurve *pc);
+void BKE_paint_curve_free(struct PaintCurve *pc, const bool do_id_user);
void BKE_paint_init(struct Scene *sce, PaintMode mode, const char col[3]);
void BKE_paint_free(struct Paint *p);
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 4861641..c3a0223 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -307,7 +307,7 @@ float BKE_screen_view3d_zoom_to_fac(float camzoom);
float BKE_screen_view3d_zoom_from_fac(float zoomfac);
/* screen */
-void BKE_screen_free(struct bScreen *sc);
+void BKE_screen_free(struct bScreen *sc, const bool do_id_user);
unsigned int BKE_screen_visible_layers(struct bScreen *screen, struct Scene *scene);
#endif
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index c4961d2..1160028 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -156,37 +156,22 @@ void BKE_curve_editNurb_free(Curve *cu)
*/
void BKE_curve_free(Curve *cu, const bool do_id_user)
{
+ if (do_id_user) {
+ BKE_curve_release_datablocks(cu);
+ }
+
BKE_nurbList_free(&cu->nurb);
BKE_curve_editfont_free(cu);
BKE_curve_editNurb_free(cu);
- if (do_id_user) {
- BKE_curve_release_datablocks(cu);
- }
-
BKE_animdata_free((ID *)cu);
- if (cu->mat) {
- MEM_freeN(cu->mat);
- cu->mat = NULL;
- }
- if (cu->str) {
- MEM_freeN(cu->str);
- cu->str = NULL;
- }
- if (cu->strinfo) {
- MEM_freeN(cu->strinfo);
- cu->strinfo = NULL;
- }
- if (cu->bb) {
- MEM_freeN(cu->bb);
- cu->bb = NULL;
- }
- if (cu->tb) {
- MEM_freeN(cu->tb);
- cu->tb = NULL;
- }
+ MEM_SAFE_FREE(cu->mat);
+ MEM_SAFE_FREE(cu->str);
+ MEM_SAFE_FREE(cu->strinfo);
+ MEM_SAFE_FREE(cu->bb);
+ MEM_SAFE_FREE(cu->tb);
}
Curve *BKE_curve_add(Main *bmain, const char *name, int type)
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 1c3c594..bb38d6c 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -329,17 +329,6 @@ void BKE_image_free_buffers(Image *ima)
ima->ok = IMA_OK;
}
-#if 0 /* Not needed currently. */
-/**
- * Release all datablocks (ID) used by this image (datablocks are never freed, they are just unreferenced).
- *
- * \param ima The image which has to release its data.
- */
-void BKE_image_release_datablocks(Image *ima)
-{
-}
-#endif
-
/**
* Free (or release) any data used by this image (does not free the image itself).
*
@@ -351,12 +340,6 @@ void BKE_image_free(Image *ima, const bool UNUSED(do_id_user))
{
int a;
-#if 0
- if (do_id_user) {
- BKE_image_release_datablocks(ima);
- }
-#endif
-
BKE_image_free_buffers(ima);
image_free_packedfiles(ima);
@@ -373,10 +356,7 @@ void BKE_image_free(Image *ima, const bool UNUSED(do_id_user))
}
image_free_views(ima);
- if (ima->stereo3d_format) {
- MEM_freeN(ima->stereo3d_format);
- ima->stereo3d_format = NULL;
- }
+ MEM_SAFE_FREE(ima->stereo3d_format);
}
/* only image block itself */
diff --git a/source/blender/blenkernel/intern/lamp.c b/source/blender/blenkernel/intern/lamp.c
index f413879..6974cfb 100644
--- a/source/blender/blenkernel/intern/lamp.c
+++ b/source/blender/blenkernel/intern/lamp.c
@@ -241,7 +241,6 @@ void BKE_lamp_release_datablocks(Lamp *la)
*/
void BKE_lamp_free(Lamp *la, const bool do_id_user)
{
- MTex *mtex;
int a;
if (do_id_user) {
@@ -249,11 +248,7 @@ void BKE_lamp_free(Lamp *la, const bool do_id_user)
}
for (a = 0; a < MAX_MTEX; a++) {
- mtex = la->mtex[a];
- if (mtex) {
- MEM_freeN(mtex);
- la->mtex[a] = NULL;
- }
+ MEM_SAFE_FREE(la->mtex[a]);
}
BKE_animdata_free((ID *)la);
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index c9401a5..403befc 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -322,10 +322,7 @@ void BKE_lattice_free(Lattice *lt, const bool do_id_user)
BKE_lattice_release_datablocks(lt);
}
- if (lt->def) {
- MEM_freeN(lt->def);
- lt->def = NULL;
- }
+ MEM_SAFE_FREE(lt->def);
if (lt->dvert) {
BKE_defvert_array_free(lt->dvert, lt->pntsu * lt->pntsv * lt->pntsw);
lt->dvert = NULL;
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 71316f2..db7aca2 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -988,7 +988,7 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, bool do_id_user)
BKE_world_free((World *)id);
break;
case ID_SCR:
- BKE_screen_free((bScreen *)id);
+ BKE_screen_free((bScreen *)id, do_id_user);
break;
case ID_VF:
BKE_vfont_free((VFont *)id);
@@ -1037,13 +1037,13 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, bool do_id_user)
BKE_mask_free(bmain, (Mask *)id);
break;
case ID_LS:
- BKE_linestyle_free((FreestyleLineStyle *)id);
+ BKE_linestyle_free((FreestyleLineStyle *)id, do_id_user);
break;
case ID_PAL:
- BKE_palette_free((Palette *)id);
+ BKE_palette_free((Palette *)id, do_id_user);
break;
case ID_PC:
- BKE_paint_curve_free((PaintCurve *)id);
+ BKE_paint_curve_free((PaintCurve *)id, do_id_user);
break;
}
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index ac2c4e3..46524f5 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -123,18 +123,49 @@ FreestyleLineStyle *BKE_linestyle_new(struct Main *bmain, const char *name)
return linestyle;
}
-void BKE_linestyle_free(FreestyleLineStyle *linestyle)
+/**
+ * Release all datablocks (ID) used by this linestyle (datablocks are never freed, they are just unreferenced).
+ *
+ * \param linestyle The linestyle which has to release its data.
+ */
+void BKE_linestyle_release_datablocks(FreestyleLineStyle *linestyle)
{
- LineStyleModifier *m;
-
MTex *mtex;
int a;
+ if (linestyle == NULL)
+ return;
+
for (a = 0; a < MAX_MTEX; a++) {
mtex = linestyle->mtex[a];
- if (mtex && mtex->tex) mtex->tex->id.us--;
- if (mtex) MEM_freeN(mtex);
+ if (mtex && mtex->tex) {
+ mtex->tex->id.us--;
+ mtex->tex = NULL;
+ }
}
+}
+
+/**
+ * Free (or release) any data used by this linestyle (does not free the linestyle itself).
+ *
+ * \param linestyle The linestyle to free.
+ * \param do_id_user When \a true, ID datablocks used (referenced) by this linestyle are 'released'
+ * (their user count is decreased).
+ */
+void BKE_linestyle_free(FreestyleLineStyle *linestyle, const bool do_id_user)
+{
+ LineStyleModifier *m;
+ int a;
+
+ if (do_id_user) {
+ BKE_linestyle_release_datablocks(linestyle);
+ }
+
+ for (a = 0; a < MAX_MTEX; a++) {
+ MEM_SAFE_FREE(linestyle->mtex[a]);
+ }
+
+ /* is no lib link block, but linestyle extension */
if (linestyle->nodetree) {
ntreeFreeTree(linestyle->nodetree);
MEM_freeN(linestyle->nodetree);
@@ -158,7 +189,7 @@ FreestyleLineStyle *BKE_linestyle_copy(struct Main *bmain, FreestyleLineStyle *l
int a;
new_linestyle = BKE_linestyle_new(bmain, linestyle->id.name + 2);
- BKE_linestyle_free(new_linestyle);
+ BKE_linestyle_free(new_linestyle, true);
for (a = 0; a < MAX_MTEX; a++) {
if (linestyle->mtex[a]) {
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index b189dbd..8cfde20 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -115,27 +115,16 @@ void BKE_material_release_datablocks(Material *ma)
*/
void BKE_material_free(Material *ma, const bool do_id_user)
{
- MTex *mtex;
int a;
BKE_material_release_datablocks(ma);
for (a = 0; a < MAX_MTEX; a++) {
- mtex = ma->mtex[a];
- if (mtex) {
- MEM_freeN(mtex);
- ma->mtex[a] = NULL;
- }
+ MEM_SAFE_FREE(ma->mtex[a]);
}
- if (ma->ramp_col) {
- MEM_freeN(ma->ramp_col);
- ma->ramp_col = NULL;
- }
- if (ma->ramp_spec) {
- MEM_freeN(ma->ramp_spec);
- ma->ramp_spec = NULL;
- }
+ MEM_SAFE_FREE(ma->ramp_col);
+ MEM_SAFE_FREE(ma->ramp_spec);
BKE_animdata_free((ID *)ma);
@@ -149,10 +138,7 @@ void BKE_material_free(Material *ma, const bool do_id_user)
ma->nodetree = NULL;
}
- if (ma->texpaintslot) {
- MEM_freeN(ma->texpaintslot);
- ma->texpaintslot = NULL;
- }
+ MEM_SAFE_F
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list