[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