Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2015-10-13 16:44:58 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2015-10-13 16:44:58 +0300
commit168604ecbe60ba909e3057cadf1c4047ea966d0c (patch)
treea4699c125b9ace4e1d4efaff747a3ac0faed78c3
parent9d5cdf92b28217e29b6840eae8d0c44f033e3cf6 (diff)
Revert to master - those changes are globally valid, but remain incomplete,free-refcount-ids
and total new code is being done in id-remap anyway, not worth bothering with this for now...
-rw-r--r--source/blender/blenkernel/BKE_action.h2
-rw-r--r--source/blender/blenkernel/BKE_armature.h2
-rw-r--r--source/blender/blenkernel/BKE_brush.h2
-rw-r--r--source/blender/blenkernel/BKE_camera.h2
-rw-r--r--source/blender/blenkernel/BKE_curve.h3
-rw-r--r--source/blender/blenkernel/BKE_font.h2
-rw-r--r--source/blender/blenkernel/BKE_gpencil.h2
-rw-r--r--source/blender/blenkernel/BKE_group.h2
-rw-r--r--source/blender/blenkernel/BKE_image.h2
-rw-r--r--source/blender/blenkernel/BKE_key.h2
-rw-r--r--source/blender/blenkernel/BKE_lamp.h2
-rw-r--r--source/blender/blenkernel/BKE_lattice.h2
-rw-r--r--source/blender/blenkernel/BKE_linestyle.h2
-rw-r--r--source/blender/blenkernel/BKE_mask.h4
-rw-r--r--source/blender/blenkernel/BKE_material.h3
-rw-r--r--source/blender/blenkernel/BKE_mball.h3
-rw-r--r--source/blender/blenkernel/BKE_mesh.h3
-rw-r--r--source/blender/blenkernel/BKE_movieclip.h2
-rw-r--r--source/blender/blenkernel/BKE_node.h3
-rw-r--r--source/blender/blenkernel/BKE_object.h3
-rw-r--r--source/blender/blenkernel/BKE_paint.h4
-rw-r--r--source/blender/blenkernel/BKE_particle.h2
-rw-r--r--source/blender/blenkernel/BKE_scene.h2
-rw-r--r--source/blender/blenkernel/BKE_screen.h2
-rw-r--r--source/blender/blenkernel/BKE_sound.h4
-rw-r--r--source/blender/blenkernel/BKE_speaker.h2
-rw-r--r--source/blender/blenkernel/BKE_text.h2
-rw-r--r--source/blender/blenkernel/BKE_texture.h2
-rw-r--r--source/blender/blenkernel/BKE_world.h3
-rw-r--r--source/blender/blenkernel/intern/action.c23
-rw-r--r--source/blender/blenkernel/intern/armature.c39
-rw-r--r--source/blender/blenkernel/intern/brush.c43
-rw-r--r--source/blender/blenkernel/intern/camera.c14
-rw-r--r--source/blender/blenkernel/intern/curve.c94
-rw-r--r--source/blender/blenkernel/intern/font.c11
-rw-r--r--source/blender/blenkernel/intern/gpencil.c17
-rw-r--r--source/blender/blenkernel/intern/group.c18
-rw-r--r--source/blender/blenkernel/intern/image.c21
-rw-r--r--source/blender/blenkernel/intern/key.c15
-rw-r--r--source/blender/blenkernel/intern/lamp.c38
-rw-r--r--source/blender/blenkernel/intern/lattice.c38
-rw-r--r--source/blender/blenkernel/intern/library.c71
-rw-r--r--source/blender/blenkernel/intern/linestyle.c37
-rw-r--r--source/blender/blenkernel/intern/mask.c18
-rw-r--r--source/blender/blenkernel/intern/material.c65
-rw-r--r--source/blender/blenkernel/intern/mball.c37
-rw-r--r--source/blender/blenkernel/intern/mesh.c60
-rw-r--r--source/blender/blenkernel/intern/movieclip.c18
-rw-r--r--source/blender/blenkernel/intern/node.c38
-rw-r--r--source/blender/blenkernel/intern/object.c112
-rw-r--r--source/blender/blenkernel/intern/paint.c25
-rw-r--r--source/blender/blenkernel/intern/particle.c40
-rw-r--r--source/blender/blenkernel/intern/scene.c89
-rw-r--r--source/blender/blenkernel/intern/screen.c12
-rw-r--r--source/blender/blenkernel/intern/sequencer.c4
-rw-r--r--source/blender/blenkernel/intern/sound.c23
-rw-r--r--source/blender/blenkernel/intern/speaker.c17
-rw-r--r--source/blender/blenkernel/intern/text.c17
-rw-r--r--source/blender/blenkernel/intern/texture.c54
-rw-r--r--source/blender/blenkernel/intern/world.c44
-rw-r--r--source/blender/compositor/operations/COM_MaskOperation.cpp2
-rw-r--r--source/blender/editors/gpencil/gpencil_undo.c4
-rw-r--r--source/blender/editors/mesh/editmesh_utils.c2
-rw-r--r--source/blender/editors/mesh/meshtools.c2
-rw-r--r--source/blender/editors/render/render_preview.c8
-rw-r--r--source/blender/editors/screen/screen_edit.c4
-rw-r--r--source/blender/editors/sound/sound_ops.c2
-rw-r--r--source/blender/editors/space_node/node_group.c2
-rw-r--r--source/blender/makesrna/intern/rna_main_api.c3
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c2
-rw-r--r--source/blender/render/intern/source/render_texture.c5
71 files changed, 476 insertions, 783 deletions
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h
index e9adec8f3b2..3fceef5d95d 100644
--- a/source/blender/blenkernel/BKE_action.h
+++ b/source/blender/blenkernel/BKE_action.h
@@ -61,7 +61,7 @@ struct bAction *add_empty_action(struct Main *bmain, const char name[]);
struct bAction *BKE_action_copy(struct bAction *src);
/* Deallocate all of the Action's data, but not the Action itself */
-void BKE_action_free(struct bAction *act, const bool do_id_user);
+void BKE_action_free(struct bAction *act);
// XXX is this needed?
void BKE_action_make_local(struct bAction *act);
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index 80066cdc9a2..e1885e46b24 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -73,7 +73,7 @@ extern "C" {
struct bArmature *BKE_armature_add(struct Main *bmain, const char *name);
struct bArmature *BKE_armature_from_object(struct Object *ob);
void BKE_armature_bonelist_free(struct ListBase *lb);
-void BKE_armature_free(struct bArmature *arm, const bool do_id_user);
+void BKE_armature_free(struct bArmature *arm);
void BKE_armature_make_local(struct bArmature *arm);
struct bArmature *BKE_armature_copy(struct bArmature *arm);
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index d2c8f97602c..aff3fb08df6 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -44,7 +44,7 @@ struct Brush *BKE_brush_add(struct Main *bmain, const char *name, short ob_mode)
struct Brush *BKE_brush_first_search(struct Main *bmain, short ob_mode);
struct Brush *BKE_brush_copy(struct Brush *brush);
void BKE_brush_make_local(struct Brush *brush);
-void BKE_brush_free(struct Brush *brush, const bool do_id_user);
+void BKE_brush_free(struct Brush *brush);
void BKE_brush_sculpt_reset(struct Brush *brush);
diff --git a/source/blender/blenkernel/BKE_camera.h b/source/blender/blenkernel/BKE_camera.h
index 3dcda194cac..aacb7a4066b 100644
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@ -53,7 +53,7 @@ struct GPUFXSettings;
void *BKE_camera_add(struct Main *bmain, const char *name);
struct Camera *BKE_camera_copy(struct Camera *cam);
void BKE_camera_make_local(struct Camera *cam);
-void BKE_camera_free(struct Camera *ca, const bool do_id_user);
+void BKE_camera_free(struct Camera *ca);
/* Camera Usage */
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 17836ced2ba..a03dd287146 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -66,7 +66,8 @@ typedef struct CurveCache {
#define CU_DO_2DFILL(cu) ((((cu)->flag & CU_3D) == 0) && (((cu)->flag & (CU_FRONT | CU_BACK)) != 0))
/* ** Curve ** */
-void BKE_curve_free(struct Curve *cu, const bool do_id_user);
+void BKE_curve_unlink(struct Curve *cu);
+void BKE_curve_free(struct Curve *cu);
void BKE_curve_editfont_free(struct Curve *cu);
struct Curve *BKE_curve_add(struct Main *bmain, const char *name, int type);
struct Curve *BKE_curve_copy(struct Curve *cu);
diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h
index 0c96107a47f..f20c166aa6d 100644
--- a/source/blender/blenkernel/BKE_font.h
+++ b/source/blender/blenkernel/BKE_font.h
@@ -78,7 +78,7 @@ bool BKE_vfont_is_builtin(struct VFont *vfont);
void BKE_vfont_builtin_register(void *mem, int size);
void BKE_vfont_free_data(struct VFont *vfont);
-void BKE_vfont_free(struct VFont *sc, const bool do_id_user);
+void BKE_vfont_free(struct VFont *sc);
struct VFont *BKE_vfont_builtin_get(void);
struct VFont *BKE_vfont_load(struct Main *bmain, const char *filepath);
struct VFont *BKE_vfont_load_exists_ex(struct Main *bmain, const char *filepath, bool *r_exists);
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 2d287172e90..084c5527f21 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -42,7 +42,7 @@ struct bGPDstroke;
bool free_gpencil_strokes(struct bGPDframe *gpf);
void free_gpencil_frames(struct bGPDlayer *gpl);
void free_gpencil_layers(struct ListBase *list);
-void BKE_gpencil_free(struct bGPdata *gpd, const bool do_id_user);
+void BKE_gpencil_free(struct bGPdata *gpd);
void gpencil_stroke_sync_selection(struct bGPDstroke *gps);
diff --git a/source/blender/blenkernel/BKE_group.h b/source/blender/blenkernel/BKE_group.h
index d27bdd32a58..d856e90a340 100644
--- a/source/blender/blenkernel/BKE_group.h
+++ b/source/blender/blenkernel/BKE_group.h
@@ -40,7 +40,7 @@ struct Main;
struct Object;
struct Scene;
-void BKE_group_free(struct Group *group, const bool do_id_user);
+void BKE_group_free(struct Group *group);
void BKE_group_unlink(struct Group *group);
struct Group *BKE_group_add(struct Main *bmain, const char *name);
struct Group *BKE_group_copy(struct Group *group);
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index baea56ac751..94afc8a16ea 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -59,7 +59,7 @@ void BKE_image_free_packedfiles(struct Image *image);
void BKE_image_free_views(struct Image *image);
void BKE_image_free_buffers(struct Image *image);
/* call from library */
-void BKE_image_free(struct Image *image, const bool do_id_user);
+void BKE_image_free(struct Image *image);
typedef void (StampCallback)(void *data, const char *propname, char *propvalue, int len);
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index af466e512f6..1edbb455ca4 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -47,7 +47,7 @@ struct WeightsArrayCache;
extern "C" {
#endif
-void BKE_key_free(struct Key *sc, const bool do_id_user);
+void BKE_key_free(struct Key *sc);
void BKE_key_free_nolib(struct Key *key);
struct Key *BKE_key_add(struct ID *id);
struct Key *BKE_key_copy(struct Key *key);
diff --git a/source/blender/blenkernel/BKE_lamp.h b/source/blender/blenkernel/BKE_lamp.h
index dce0b7c5fdc..fb2c4da91ea 100644
--- a/source/blender/blenkernel/BKE_lamp.h
+++ b/source/blender/blenkernel/BKE_lamp.h
@@ -46,7 +46,7 @@ struct Lamp *BKE_lamp_add(struct Main *bmain, const char *name) ATTR_WARN_UNUSED
struct Lamp *BKE_lamp_copy(struct Lamp *la) ATTR_WARN_UNUSED_RESULT;
struct Lamp *localize_lamp(struct Lamp *la) ATTR_WARN_UNUSED_RESULT;
void BKE_lamp_make_local(struct Lamp *la);
-void BKE_lamp_free(struct Lamp *la, const bool do_id_user);
+void BKE_lamp_free(struct Lamp *la);
void lamp_drivers_update(struct Scene *scene, struct Lamp *la, float ctime);
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index adf37c6d429..677d8e34229 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -47,7 +47,7 @@ struct MDeformVert;
void BKE_lattice_resize(struct Lattice *lt, int u, int v, int w, struct Object *ltOb);
struct Lattice *BKE_lattice_add(struct Main *bmain, const char *name);
struct Lattice *BKE_lattice_copy(struct Lattice *lt);
-void BKE_lattice_free(struct Lattice *lt, const bool do_id_user);
+void BKE_lattice_free(struct Lattice *lt);
void BKE_lattice_make_local(struct Lattice *lt);
void calc_lat_fudu(int flag, int res, float *r_fu, float *r_du);
diff --git a/source/blender/blenkernel/BKE_linestyle.h b/source/blender/blenkernel/BKE_linestyle.h
index 8d6a860cd02..e77b4f5e8fe 100644
--- a/source/blender/blenkernel/BKE_linestyle.h
+++ b/source/blender/blenkernel/BKE_linestyle.h
@@ -50,7 +50,7 @@ struct ColorBand;
struct bContext;
FreestyleLineStyle *BKE_linestyle_new(struct Main *bmain, const char *name);
-void BKE_linestyle_free(FreestyleLineStyle *linestyle, const bool do_id_user);
+void BKE_linestyle_free(FreestyleLineStyle *linestyle);
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_mask.h b/source/blender/blenkernel/BKE_mask.h
index cc74869acfb..2f85db4d5d2 100644
--- a/source/blender/blenkernel/BKE_mask.h
+++ b/source/blender/blenkernel/BKE_mask.h
@@ -123,8 +123,8 @@ struct Mask *BKE_mask_new(struct Main *bmain, const char *name);
struct Mask *BKE_mask_copy_nolib(struct Mask *mask);
struct Mask *BKE_mask_copy(struct Mask *mask);
-void BKE_mask_free(struct Mask *mask, const bool do_id_user);
-void BKE_mask_unlink(struct Main *bmain, struct Mask *mask);
+void BKE_mask_free_nolib(struct Mask *mask);
+void BKE_mask_free(struct Main *bmain, struct Mask *mask);
void BKE_mask_coord_from_frame(float r_co[2], const float co[2], const float frame_size[2]);
void BKE_mask_coord_from_movieclip(struct MovieClip *clip, struct MovieClipUser *user, float r_co[2], const float co[2]);
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 6804838ddf8..a3c61f44ff2 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -45,7 +45,8 @@ struct Scene;
/* materials */
void init_def_material(void);
-void BKE_material_free(struct Material *ma, const bool do_id_user);
+void BKE_material_free(struct Material *sc);
+void BKE_material_free_ex(struct Material *ma, bool do_id_user);
void test_object_materials(struct Main *bmain, struct ID *id);
void BKE_material_resize_object(struct Object *ob, const short totcol, bool do_id_user);
void init_material(struct Material *ma);
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index 02c53280551..62cd50099fd 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -38,7 +38,8 @@ struct Object;
struct Scene;
struct MetaElem;
-void BKE_mball_free(struct MetaBall *mb, const bool do_id_user);
+void BKE_mball_unlink(struct MetaBall *mb);
+void BKE_mball_free(struct MetaBall *mb);
struct MetaBall *BKE_mball_add(struct Main *bmain, const char *name);
struct MetaBall *BKE_mball_copy(struct MetaBall *mb);
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index f26d084e9f4..5bd8931ee2e 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -80,7 +80,8 @@ int poly_get_adj_loops_from_vert(
int BKE_mesh_edge_other_vert(const struct MEdge *e, int v);
-void BKE_mesh_free(struct Mesh *me, const bool do_id_user);
+void BKE_mesh_unlink(struct Mesh *me);
+void BKE_mesh_free(struct Mesh *me, int unlink);
struct Mesh *BKE_mesh_add(struct Main *bmain, const char *name);
struct Mesh *BKE_mesh_copy_ex(struct Main *bmain, struct Mesh *me);
struct Mesh *BKE_mesh_copy(struct Mesh *me);
diff --git a/source/blender/blenkernel/BKE_movieclip.h b/source/blender/blenkernel/BKE_movieclip.h
index bf5f8fac838..afca326c727 100644
--- a/source/blender/blenkernel/BKE_movieclip.h
+++ b/source/blender/blenkernel/BKE_movieclip.h
@@ -39,7 +39,7 @@ struct MovieClipScopes;
struct MovieClipUser;
struct MovieDistortion;
-void BKE_movieclip_free(struct MovieClip *clip, const bool do_id_user);
+void BKE_movieclip_free(struct MovieClip *clip);
void BKE_movieclip_unlink(struct Main *bmain, struct MovieClip *clip);
struct MovieClip *BKE_movieclip_file_add(struct Main *bmain, const char *name);
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 78a239641dd..b97bf203a7c 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -340,7 +340,8 @@ void ntreeSetTypes(const struct bContext *C, struct bNodeTree *ntree);
struct bNodeTree *ntreeAddTree(struct Main *bmain, const char *name, const char *idname);
/* copy/free funcs, need to manage ID users */
-void ntreeFreeTree(struct bNodeTree *ntree, const bool do_id_user);
+void ntreeFreeTree_ex(struct bNodeTree *ntree, const bool do_id_user);
+void ntreeFreeTree(struct bNodeTree *ntree);
struct bNodeTree *ntreeCopyTree_ex(struct bNodeTree *ntree, struct Main *bmain, const bool do_id_user);
struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree);
void ntreeSwitchID_ex(struct bNodeTree *ntree, struct ID *sce_from, struct ID *sce_to, const bool do_id_user);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 7e7a6bd1149..f3a1be24af6 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -64,7 +64,8 @@ void BKE_object_free_bulletsoftbody(struct Object *ob);
void BKE_object_free_curve_cache(struct Object *ob);
void BKE_object_update_base_layer(struct Scene *scene, struct Object *ob);
-void BKE_object_free(struct Object *ob, const bool do_id_user);
+void BKE_object_free(struct Object *ob);
+void BKE_object_free_ex(struct Object *ob, bool do_id_user);
void BKE_object_free_derived_caches(struct Object *ob);
void BKE_object_free_caches(struct Object *object);
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index a2e59e4e913..bf1cfb263eb 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, const bool do_id_user);
+void BKE_palette_free(struct Palette *palette);
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, const bool do_id_user);
+void BKE_paint_curve_free(struct PaintCurve *pc);
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_particle.h b/source/blender/blenkernel/BKE_particle.h
index 2269a78275d..00cc48cf713 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -297,7 +297,7 @@ void psys_check_group_weights(struct ParticleSettings *part);
int psys_uses_gravity(struct ParticleSimulationData *sim);
/* free */
-void BKE_particlesettings_free(struct ParticleSettings *part, const bool do_id_user);
+void BKE_particlesettings_free(struct ParticleSettings *part);
void psys_free_path_cache(struct ParticleSystem *psys, struct PTCacheEdit *edit);
void psys_free(struct Object *ob, struct ParticleSystem *psys);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index a18c1e7cdd2..027bdbbbe58 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -66,7 +66,7 @@ struct Base *_setlooper_base_step(struct Scene **sce_iter, struct Base *base);
void free_avicodecdata(struct AviCodecData *acd);
void free_qtcodecdata(struct QuicktimeCodecData *acd);
-void BKE_scene_free(struct Scene *sce, const bool do_id_user);
+void BKE_scene_free(struct Scene *sce);
struct Scene *BKE_scene_add(struct Main *bmain, const char *name);
/* base functions */
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index c3a0223e2a2..48616418e67 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, const bool do_id_user);
+void BKE_screen_free(struct bScreen *sc);
unsigned int BKE_screen_visible_layers(struct bScreen *screen, struct Scene *scene);
#endif
diff --git a/source/blender/blenkernel/BKE_sound.h b/source/blender/blenkernel/BKE_sound.h
index 3431eff55ba..67db2537c8f 100644
--- a/source/blender/blenkernel/BKE_sound.h
+++ b/source/blender/blenkernel/BKE_sound.h
@@ -72,13 +72,15 @@ struct bSound *BKE_sound_new_buffer(struct Main *bmain, struct bSound *source);
struct bSound *BKE_sound_new_limiter(struct Main *bmain, struct bSound *source, float start, float end);
#endif
+void BKE_sound_delete(struct Main *bmain, struct bSound *sound);
+
void BKE_sound_cache(struct bSound *sound);
void BKE_sound_delete_cache(struct bSound *sound);
void BKE_sound_load(struct Main *main, struct bSound *sound);
-void BKE_sound_free(struct bSound *sound, const bool do_id_user);
+void BKE_sound_free(struct bSound *sound);
#if defined(__AUD_C_API_H__) || defined(WITH_SYSTEM_AUDASPACE)
AUD_Device *BKE_sound_mixdown(struct Scene *scene, AUD_DeviceSpecs specs, int start, float volume);
diff --git a/source/blender/blenkernel/BKE_speaker.h b/source/blender/blenkernel/BKE_speaker.h
index 571e6e7cb39..5d93b9844ab 100644
--- a/source/blender/blenkernel/BKE_speaker.h
+++ b/source/blender/blenkernel/BKE_speaker.h
@@ -33,6 +33,6 @@ struct Main;
void *BKE_speaker_add(struct Main *bmain, const char *name);
struct Speaker *BKE_speaker_copy(struct Speaker *spk);
void BKE_speaker_make_local(struct Speaker *spk);
-void BKE_speaker_free(struct Speaker *spk, const bool do_id_user);
+void BKE_speaker_free(struct Speaker *spk);
#endif
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index 6350563adc5..a5a59d14c92 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -41,7 +41,7 @@ struct Main;
struct Text;
struct TextLine;
-void BKE_text_free (struct Text *text, const bool do_id_user);
+void BKE_text_free (struct Text *text);
void txt_set_undostate (int u);
int txt_get_undostate (void);
struct Text *BKE_text_add (struct Main *bmain, const char *name);
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 504de22295a..95918b9ca0b 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -67,7 +67,7 @@ struct CBData *colorband_element_add(struct ColorBand *coba, float position);
int colorband_element_remove(struct ColorBand *coba, int index);
void colorband_update_sort(struct ColorBand *coba);
-void BKE_texture_free(struct Tex *tex, const bool do_id_user);
+void BKE_texture_free(struct Tex *tex);
void BKE_texture_default(struct Tex *tex);
struct Tex *BKE_texture_copy(struct Tex *tex);
struct Tex *BKE_texture_add(struct Main *bmain, const char *name);
diff --git a/source/blender/blenkernel/BKE_world.h b/source/blender/blenkernel/BKE_world.h
index a77a5b06817..7f4ba6c615e 100644
--- a/source/blender/blenkernel/BKE_world.h
+++ b/source/blender/blenkernel/BKE_world.h
@@ -36,7 +36,8 @@
struct Main;
struct World;
-void BKE_world_free(struct World *sc, const bool do_id_user);
+void BKE_world_free(struct World *sc);
+void BKE_world_free_ex(struct World *sc, bool do_id_user);
struct World *add_world(struct Main *bmian, const char *name);
struct World *BKE_world_copy(struct World *wrld);
struct World *localize_world(struct World *wrld);
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index ae1604a94b5..b77ae45e94d 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -159,25 +159,22 @@ void BKE_action_make_local(bAction *act)
/* .................................. */
-/**
- * Free (or release) any data used by this action (does not free the action itself).
- *
- * \param act The action to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this action are 'released'
- * (their user count is decreased).
- */
-void BKE_action_free(bAction *act, const bool UNUSED(do_id_user))
-{
- /* No animdata here. */
-
+void BKE_action_free(bAction *act)
+{
+ /* sanity check */
+ if (act == NULL)
+ return;
+
/* Free F-Curves */
free_fcurves(&act->curves);
/* Free groups */
- BLI_freelistN(&act->groups);
+ if (act->groups.first)
+ BLI_freelistN(&act->groups);
/* Free pose-references (aka local markers) */
- BLI_freelistN(&act->markers);
+ if (act->markers.first)
+ BLI_freelistN(&act->markers);
}
/* .................................. */
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index fc698f35b71..6afe7f1abe9 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -106,31 +106,30 @@ void BKE_armature_bonelist_free(ListBase *lb)
BLI_freelistN(lb);
}
-/**
- * Free (or release) any data used by this armature (does not free the armature itself).
- *
- * \param arm The armature to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this armature are 'released'
- * (their user count is decreased).
- */
-void BKE_armature_free(bArmature *arm, const bool UNUSED(do_id_user))
+void BKE_armature_free(bArmature *arm)
{
- BKE_animdata_free(&arm->id);
+ if (arm) {
+ BKE_armature_bonelist_free(&arm->bonebase);
- BKE_armature_bonelist_free(&arm->bonebase);
+ /* free editmode data */
+ if (arm->edbo) {
+ BLI_freelistN(arm->edbo);
- /* free editmode data */
- if (arm->edbo) {
- BLI_freelistN(arm->edbo);
+ MEM_freeN(arm->edbo);
+ arm->edbo = NULL;
+ }
- MEM_freeN(arm->edbo);
- arm->edbo = NULL;
- }
+ /* free sketch */
+ if (arm->sketch) {
+ freeSketch(arm->sketch);
+ arm->sketch = NULL;
+ }
- /* free sketch */
- if (arm->sketch) {
- freeSketch(arm->sketch);
- arm->sketch = NULL;
+ /* free animation data */
+ if (arm->adt) {
+ BKE_animdata_free(&arm->id);
+ arm->adt = NULL;
+ }
}
}
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 3c7f753e3d8..e0ffd830804 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -197,45 +197,22 @@ Brush *BKE_brush_copy(Brush *brush)
return brushn;
}
-/**
- * Free (or release) any data used by this brush (does not free the brush itself).
- *
- * \param brush The brush to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this brush are 'released'
- * (their user count is decreased).
- */
-void BKE_brush_free(Brush *brush, const bool do_id_user)
+/* not brush itself */
+void BKE_brush_free(Brush *brush)
{
- if (do_id_user) {
- if (brush->mtex.tex) {
- id_us_min(&brush->mtex.tex->id);
- brush->mtex.tex = NULL;
- }
+ id_us_min((ID *)brush->mtex.tex);
+ id_us_min((ID *)brush->mask_mtex.tex);
+ id_us_min((ID *)brush->paint_curve);
- if (brush->mask_mtex.tex) {
- id_us_min(&brush->mask_mtex.tex->id);
- brush->mask_mtex.tex = NULL;
- }
-
- if (brush->paint_curve) {
- id_us_min(&brush->paint_curve->id);
- brush->paint_curve = NULL;
- }
-
- /* No ID refcount here... */
- brush->toggle_brush = NULL;
- brush->clone.image = NULL;
- }
-
- if (brush->icon_imbuf) {
+ if (brush->icon_imbuf)
IMB_freeImBuf(brush->icon_imbuf);
- }
- curvemapping_free(brush->curve);
+ BKE_previewimg_free(&(brush->preview));
- MEM_SAFE_FREE(brush->gradient);
+ curvemapping_free(brush->curve);
- BKE_previewimg_free(&(brush->preview));
+ if (brush->gradient)
+ MEM_freeN(brush->gradient);
}
static void extern_local_brush(Brush *brush)
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index eb99022d034..7e043df2808 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -144,20 +144,8 @@ void BKE_camera_make_local(Camera *cam)
}
}
-/**
- * Free (or release) any data used by this camera (does not free the camera itself).
- *
- * \param ca The camera to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this camera are 'released'
- * (their user count is decreased).
- */
-void BKE_camera_free(Camera *ca, const bool do_id_user)
+void BKE_camera_free(Camera *ca)
{
- if (do_id_user) {
- /* No ID refcount here... */
- ca->dof_ob = NULL;
- }
-
BKE_animdata_free((ID *)ca);
}
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index e01813e0b88..8d7d62be7e4 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -69,6 +69,35 @@ static int cu_isectLL(const float v1[3], const float v2[3], const float v3[3], c
short cox, short coy,
float *lambda, float *mu, float vec[3]);
+void BKE_curve_unlink(Curve *cu)
+{
+ int a;
+
+ for (a = 0; a < cu->totcol; a++) {
+ if (cu->mat[a]) cu->mat[a]->id.us--;
+ cu->mat[a] = NULL;
+ }
+ if (cu->vfont)
+ cu->vfont->id.us--;
+ cu->vfont = NULL;
+
+ if (cu->vfontb)
+ cu->vfontb->id.us--;
+ cu->vfontb = NULL;
+
+ if (cu->vfonti)
+ cu->vfonti->id.us--;
+ cu->vfonti = NULL;
+
+ if (cu->vfontbi)
+ cu->vfontbi->id.us--;
+ cu->vfontbi = NULL;
+
+ if (cu->key)
+ cu->key->id.us--;
+ cu->key = NULL;
+}
+
/* frees editcurve entirely */
void BKE_curve_editfont_free(Curve *cu)
{
@@ -110,63 +139,26 @@ void BKE_curve_editNurb_free(Curve *cu)
}
}
-/**
- * Free (or release) any data used by this curve (does not free the curve itself).
- *
- * \param cu The curve to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this curve are 'released'
- * (their user count is decreased).
- */
-void BKE_curve_free(Curve *cu, const bool do_id_user)
+/* don't free curve itself */
+void BKE_curve_free(Curve *cu)
{
- if (do_id_user) {
- int a;
-
- for (a = 0; a < cu->totcol; a++) {
- if (cu->mat[a]) {
- id_us_min(&cu->mat[a]->id);
- cu->mat[a] = NULL;
- }
- }
- if (cu->vfont) {
- id_us_min(&cu->vfont->id);
- cu->vfont = NULL;
- }
- if (cu->vfontb) {
- id_us_min(&cu->vfontb->id);
- cu->vfontb = NULL;
- }
- if (cu->vfonti) {
- id_us_min(&cu->vfonti->id);
- cu->vfonti = NULL;
- }
- if (cu->vfontbi) {
- id_us_min(&cu->vfontbi->id);
- cu->vfontbi = NULL;
- }
- if (cu->key) {
- id_us_min(&cu->key->id);
- cu->key = NULL;
- }
-
- /* No ID refcount here... */
- cu->bevobj = NULL;
- cu->taperobj = NULL;
- cu->textoncurve = NULL;
- }
-
- BKE_animdata_free((ID *)cu);
-
BKE_nurbList_free(&cu->nurb);
BKE_curve_editfont_free(cu);
BKE_curve_editNurb_free(cu);
+ BKE_curve_unlink(cu);
+ BKE_animdata_free((ID *)cu);
- 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);
+ if (cu->mat)
+ MEM_freeN(cu->mat);
+ if (cu->str)
+ MEM_freeN(cu->str);
+ if (cu->strinfo)
+ MEM_freeN(cu->strinfo);
+ if (cu->bb)
+ MEM_freeN(cu->bb);
+ if (cu->tb)
+ MEM_freeN(cu->tb);
}
Curve *BKE_curve_add(Main *bmain, const char *name, int type)
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index a8339b567dc..e3ebb7f908c 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -95,15 +95,10 @@ void BKE_vfont_free_data(struct VFont *vfont)
}
}
-/**
- * Free (or release) any data used by this font (does not free the font itself).
- *
- * \param vf The font to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this font are 'released'
- * (their user count is decreased).
- */
-void BKE_vfont_free(struct VFont *vf, const bool UNUSED(do_id_user))
+void BKE_vfont_free(struct VFont *vf)
{
+ if (vf == NULL) return;
+
BKE_vfont_free_data(vf);
if (vf->packedfile) {
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 8779f0d5f0e..ee5c9192371 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -112,19 +112,16 @@ void free_gpencil_layers(ListBase *list)
}
/* Free all of GPencil datablock's related data, but not the block itself */
-/**
- * Free (or release) any data used by this grease pencil (does not free the gpencil itself).
- *
- * \param gpd The grease pencil to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this gpencil are 'released'
- * (their user count is decreased).
- */
-void BKE_gpencil_free(bGPdata *gpd, const bool UNUSED(do_id_user))
+void BKE_gpencil_free(bGPdata *gpd)
{
- BKE_animdata_free(&gpd->id);
-
/* free layers */
free_gpencil_layers(&gpd->layers);
+
+ /* free animation data */
+ if (gpd->adt) {
+ BKE_animdata_free(&gpd->id);
+ gpd->adt = NULL;
+ }
}
/* -------- Container Creation ---------- */
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 68987e21a74..3f68339be11 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -60,26 +60,17 @@ static void free_group_object(GroupObject *go)
MEM_freeN(go);
}
-/**
- * Free (or release) any data used by this group (does not free the group itself).
- *
- * \param group The group to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this group are 'released'
- * (their user count is decreased).
- */
-/* Note: technically, groupobjects are ID users (without refcount), but for now we can ignore those. */
-void BKE_group_free(Group *group, const bool UNUSED(do_id_user))
+
+void BKE_group_free(Group *group)
{
/* don't free group itself */
GroupObject *go;
- /* No animdata here. */
+ BKE_previewimg_free(&group->preview);
while ((go = BLI_pophead(&group->gobject))) {
free_group_object(go);
}
-
- BKE_previewimg_free(&group->preview);
}
void BKE_group_unlink(Group *group)
@@ -141,8 +132,7 @@ void BKE_group_unlink(Group *group)
}
/* group stays in library, but no members */
- /* XXX This is suspicious, means we keep a dangling, empty group? Also, does not take into account fakeuser? */
- BKE_group_free(group, false);
+ BKE_group_free(group);
group->id.us = 0;
}
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 4563b18a822..1b329815493 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -329,22 +329,20 @@ void BKE_image_free_buffers(Image *ima)
ima->ok = IMA_OK;
}
-/**
- * Free (or release) any data used by this image (does not free the image itself).
- *
- * \param ima The image to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this image are 'released'
- * (their user count is decreased).
- */
-void BKE_image_free(Image *ima, const bool UNUSED(do_id_user))
+/* called by library too, do not free ima itself */
+void BKE_image_free(Image *ima)
{
int a;
- /* Also frees animdata. */
BKE_image_free_buffers(ima);
image_free_packedfiles(ima);
+ BKE_icon_id_delete(&ima->id);
+ ima->id.icon_id = 0;
+
+ BKE_previewimg_free(&ima->preview);
+
for (a = 0; a < IMA_MAX_RENDER_SLOT; a++) {
if (ima->renders[a]) {
RE_FreeRenderResult(ima->renders[a]);
@@ -353,10 +351,7 @@ void BKE_image_free(Image *ima, const bool UNUSED(do_id_user))
}
image_free_views(ima);
- MEM_SAFE_FREE(ima->stereo3d_format);
-
- BKE_icon_id_delete(&ima->id);
- BKE_previewimg_free(&ima->preview);
+ MEM_freeN(ima->stereo3d_format);
}
/* only image block itself */
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index b1e12588962..362f41335d2 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -74,22 +74,9 @@
#define IPO_BEZTRIPLE 100
#define IPO_BPOINT 101
-
-/**
- * Free (or release) any data used by this shapekey (does not free the key itself).
- *
- * \param key The shapekey to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this key are 'released'
- * (their user count is decreased).
- */
-void BKE_key_free(Key *key, const bool do_id_user)
+void BKE_key_free(Key *key)
{
KeyBlock *kb;
-
- if (do_id_user) {
- /* No ID refcount here... */
- key->from = NULL;
- }
BKE_animdata_free((ID *)key);
diff --git a/source/blender/blenkernel/intern/lamp.c b/source/blender/blenkernel/intern/lamp.c
index 48498440fa9..44e35c645de 100644
--- a/source/blender/blenkernel/intern/lamp.c
+++ b/source/blender/blenkernel/intern/lamp.c
@@ -210,48 +210,30 @@ void BKE_lamp_make_local(Lamp *la)
}
}
-/**
- * Free (or release) any data used by this lamp (does not free the lamp itself).
- *
- * \param la The lamp to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this lamp are 'released'
- * (their user count is decreased).
- */
-void BKE_lamp_free(Lamp *la, const bool do_id_user)
+void BKE_lamp_free(Lamp *la)
{
+ MTex *mtex;
int a;
- if (do_id_user) {
- MTex *mtex;
- int a;
-
- for (a = 0; a < MAX_MTEX; a++) {
- mtex = la->mtex[a];
- if (mtex && mtex->tex) {
- id_us_min(&mtex->tex->id);
- mtex->tex = NULL;
- }
- }
- }
-
- BKE_animdata_free((ID *)la);
-
for (a = 0; a < MAX_MTEX; a++) {
- MEM_SAFE_FREE(la->mtex[a]);
+ mtex = la->mtex[a];
+ if (mtex && mtex->tex) mtex->tex->id.us--;
+ if (mtex) MEM_freeN(mtex);
}
+ BKE_animdata_free((ID *)la);
+
curvemapping_free(la->curfalloff);
- la->curfalloff = NULL;
/* is no lib link block, but lamp extension */
if (la->nodetree) {
- ntreeFreeTree(la->nodetree, do_id_user);
+ ntreeFreeTree(la->nodetree);
MEM_freeN(la->nodetree);
- la->nodetree = NULL;
}
- BKE_icon_id_delete(&la->id);
BKE_previewimg_free(&la->preview);
+ BKE_icon_id_delete(&la->id);
+ la->id.icon_id = 0;
}
/* Calculate all drivers for lamps, see material_drivers_update for why this is a bad hack */
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index cb9b0c09f64..009e1d20328 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -293,40 +293,24 @@ Lattice *BKE_lattice_copy(Lattice *lt)
return ltn;
}
-/**
- * Free (or release) any data used by this lattice (does not free the lattice itself).
- *
- * \param lt The lattice to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this lattice are 'released'
- * (their user count is decreased).
- */
-void BKE_lattice_free(Lattice *lt, const bool do_id_user)
+void BKE_lattice_free(Lattice *lt)
{
- if (do_id_user) {
- if (lt->key) {
- id_us_min(&lt->key->id);
- lt->key = NULL;
- }
- }
-
- BKE_animdata_free(&lt->id);
-
- MEM_SAFE_FREE(lt->def);
- if (lt->dvert) {
- BKE_defvert_array_free(lt->dvert, lt->pntsu * lt->pntsv * lt->pntsw);
- lt->dvert = NULL;
- }
+ if (lt->def) MEM_freeN(lt->def);
+ if (lt->dvert) BKE_defvert_array_free(lt->dvert, lt->pntsu * lt->pntsv * lt->pntsw);
if (lt->editlatt) {
Lattice *editlt = lt->editlatt->latt;
- if (editlt->def)
- MEM_freeN(editlt->def);
- if (editlt->dvert)
- BKE_defvert_array_free(editlt->dvert, lt->pntsu * lt->pntsv * lt->pntsw);
+ if (editlt->def) MEM_freeN(editlt->def);
+ if (editlt->dvert) BKE_defvert_array_free(editlt->dvert, lt->pntsu * lt->pntsv * lt->pntsw);
MEM_freeN(editlt);
MEM_freeN(lt->editlatt);
- lt->editlatt = NULL;
+ }
+
+ /* free animation data */
+ if (lt->adt) {
+ BKE_animdata_free(&lt->id);
+ lt->adt = NULL;
}
}
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index b24eb6510d2..d6b2a3cea29 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -890,7 +890,7 @@ void BKE_libblock_relink(ID *id)
BKE_library_foreach_ID_link(id, id_relink_looper, NULL, 0);
}
-static void library_free(Library *lib, const bool UNUSED(do_id_user))
+static void BKE_library_free(Library *lib)
{
if (lib->packedfile)
freePackedFile(lib->packedfile);
@@ -951,10 +951,7 @@ void BKE_libblock_free_data(Main *bmain, ID *id)
BKE_animdata_main_cb(bmain, animdata_dtar_clear_cb, (void *)id);
}
-/**
- * used in headerbuttons.c image.c mesh.c screen.c sound.c and library.c
- *
- * \param do_id_user if \a true, try to release other ID's 'references' hold by \a idv. */
+/* used in headerbuttons.c image.c mesh.c screen.c sound.c and library.c */
void BKE_libblock_free_ex(Main *bmain, void *idv, bool do_id_user)
{
ID *id = idv;
@@ -969,107 +966,107 @@ void BKE_libblock_free_ex(Main *bmain, void *idv, bool do_id_user)
switch (type) { /* GetShort from util.h */
case ID_SCE:
- BKE_scene_free((Scene *)id, do_id_user);
+ BKE_scene_free((Scene *)id);
break;
case ID_LI:
- library_free((Library *)id, do_id_user);
+ BKE_library_free((Library *)id);
break;
case ID_OB:
- BKE_object_free((Object *)id, do_id_user);
+ BKE_object_free_ex((Object *)id, do_id_user);
break;
case ID_ME:
- BKE_mesh_free((Mesh *)id, do_id_user);
+ BKE_mesh_free((Mesh *)id, 1);
break;
case ID_CU:
- BKE_curve_free((Curve *)id, do_id_user);
+ BKE_curve_free((Curve *)id);
break;
case ID_MB:
- BKE_mball_free((MetaBall *)id, do_id_user);
+ BKE_mball_free((MetaBall *)id);
break;
case ID_MA:
- BKE_material_free((Material *)id, do_id_user);
+ BKE_material_free((Material *)id);
break;
case ID_TE:
- BKE_texture_free((Tex *)id, do_id_user);
+ BKE_texture_free((Tex *)id);
break;
case ID_IM:
- BKE_image_free((Image *)id, do_id_user);
+ BKE_image_free((Image *)id);
break;
case ID_LT:
- BKE_lattice_free((Lattice *)id, do_id_user);
+ BKE_lattice_free((Lattice *)id);
break;
case ID_LA:
- BKE_lamp_free((Lamp *)id, do_id_user);
+ BKE_lamp_free((Lamp *)id);
break;
case ID_CA:
- BKE_camera_free((Camera *) id, do_id_user);
+ BKE_camera_free((Camera *) id);
break;
- case ID_IP: /* Deprecated. */
+ case ID_IP:
BKE_ipo_free((Ipo *)id);
break;
case ID_KE:
- BKE_key_free((Key *)id, do_id_user);
+ BKE_key_free((Key *)id);
break;
case ID_WO:
- BKE_world_free((World *)id, do_id_user);
+ BKE_world_free((World *)id);
break;
case ID_SCR:
- BKE_screen_free((bScreen *)id, do_id_user);
+ BKE_screen_free((bScreen *)id);
break;
case ID_VF:
- BKE_vfont_free((VFont *)id, do_id_user);
+ BKE_vfont_free((VFont *)id);
break;
case ID_TXT:
- BKE_text_free((Text *)id, do_id_user);
+ BKE_text_free((Text *)id);
break;
case ID_SCRIPT:
/* deprecated */
break;
case ID_SPK:
- BKE_speaker_free((Speaker *)id, do_id_user);
+ BKE_speaker_free((Speaker *)id);
break;
case ID_SO:
- BKE_sound_free((bSound *)id, do_id_user);
+ BKE_sound_free((bSound *)id);
break;
case ID_GR:
- BKE_group_free((Group *)id, do_id_user);
+ BKE_group_free((Group *)id);
break;
case ID_AR:
- BKE_armature_free((bArmature *)id, do_id_user);
+ BKE_armature_free((bArmature *)id);
break;
case ID_AC:
- BKE_action_free((bAction *)id, do_id_user);
+ BKE_action_free((bAction *)id);
break;
case ID_NT:
- ntreeFreeTree((bNodeTree *)id, do_id_user);
+ ntreeFreeTree_ex((bNodeTree *)id, do_id_user);
break;
case ID_BR:
- BKE_brush_free((Brush *)id, do_id_user);
+ BKE_brush_free((Brush *)id);
break;
case ID_PA:
- BKE_particlesettings_free((ParticleSettings *)id, do_id_user);
+ BKE_particlesettings_free((ParticleSettings *)id);
break;
case ID_WM:
if (free_windowmanager_cb)
free_windowmanager_cb(NULL, (wmWindowManager *)id);
break;
case ID_GD:
- BKE_gpencil_free((bGPdata *)id, do_id_user);
+ BKE_gpencil_free((bGPdata *)id);
break;
case ID_MC:
- BKE_movieclip_free((MovieClip *)id, do_id_user);
+ BKE_movieclip_free((MovieClip *)id);
break;
case ID_MSK:
- BKE_mask_free((Mask *)id, do_id_user);
+ BKE_mask_free(bmain, (Mask *)id);
break;
case ID_LS:
- BKE_linestyle_free((FreestyleLineStyle *)id, do_id_user);
+ BKE_linestyle_free((FreestyleLineStyle *)id);
break;
case ID_PAL:
- BKE_palette_free((Palette *)id, do_id_user);
+ BKE_palette_free((Palette *)id);
break;
case ID_PC:
- BKE_paint_curve_free((PaintCurve *)id, do_id_user);
+ BKE_paint_curve_free((PaintCurve *)id);
break;
}
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index 0875321a779..ac2c4e35dce 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -123,43 +123,24 @@ FreestyleLineStyle *BKE_linestyle_new(struct Main *bmain, const char *name)
return linestyle;
}
-/**
- * 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)
+void BKE_linestyle_free(FreestyleLineStyle *linestyle)
{
LineStyleModifier *m;
- int a;
-
- if (do_id_user) {
- MTex *mtex;
-
- for (a = 0; a < MAX_MTEX; a++) {
- mtex = linestyle->mtex[a];
- if (mtex && mtex->tex) {
- id_us_min(&mtex->tex->id);
- mtex->tex = NULL;
- }
- }
- }
- BKE_animdata_free(&linestyle->id);
+ MTex *mtex;
+ int a;
for (a = 0; a < MAX_MTEX; a++) {
- MEM_SAFE_FREE(linestyle->mtex[a]);
+ mtex = linestyle->mtex[a];
+ if (mtex && mtex->tex) mtex->tex->id.us--;
+ if (mtex) MEM_freeN(mtex);
}
-
- /* is no lib link block, but linestyle extension */
if (linestyle->nodetree) {
- ntreeFreeTree(linestyle->nodetree, true); /* XXX Or do_id_user? */
+ ntreeFreeTree(linestyle->nodetree);
MEM_freeN(linestyle->nodetree);
- linestyle->nodetree = NULL;
}
+ BKE_animdata_free(&linestyle->id);
while ((m = (LineStyleModifier *)linestyle->color_modifiers.first))
BKE_linestyle_color_modifier_remove(linestyle, m);
while ((m = (LineStyleModifier *)linestyle->alpha_modifiers.first))
@@ -177,7 +158,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, true);
+ BKE_linestyle_free(new_linestyle);
for (a = 0; a < MAX_MTEX; a++) {
if (linestyle->mtex[a]) {
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index 62a2b73a971..141597e859c 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -1016,22 +1016,13 @@ void BKE_mask_layer_free_list(ListBase *masklayers)
}
}
-/**
- * Free (or release) any data used by this mask (does not free the mask itself).
- *
- * \param mask The mask to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this mask are 'released'
- * (their user count is decreased).
- */
-void BKE_mask_free(Mask *mask, const bool UNUSED(do_id_user))
+/** free for temp copy, but don't manage unlinking from other pointers */
+void BKE_mask_free_nolib(Mask *mask)
{
- BKE_animdata_free((ID *)mask);
-
- /* free mask data */
BKE_mask_layer_free_list(&mask->masklayers);
}
-void BKE_mask_unlink(Main *bmain, Mask *mask)
+void BKE_mask_free(Main *bmain, Mask *mask)
{
bScreen *scr;
ScrArea *area;
@@ -1082,6 +1073,9 @@ void BKE_mask_unlink(Main *bmain, Mask *mask)
FOREACH_NODETREE(bmain, ntree, id) {
BKE_node_tree_unlink_id((ID *)mask, ntree);
} FOREACH_NODETREE_END
+
+ /* free mask data */
+ BKE_mask_layer_free_list(&mask->masklayers);
}
void BKE_mask_coord_from_frame(float r_co[2], const float co[2], const float frame_size[2])
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 300485c2c0a..3e7e98b4a1d 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -81,54 +81,45 @@ void init_def_material(void)
init_material(&defmaterial);
}
-/**
- * Free (or release) any data used by this material (does not free the material itself).
- *
- * \param ma The material to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this material are 'released'
- * (their user count is decreased).
- */
-void BKE_material_free(Material *ma, const bool do_id_user)
+/* not material itself */
+void BKE_material_free(Material *ma)
{
- int a;
-
- if (do_id_user) {
- MTex *mtex;
-
- for (a = 0; a < MAX_MTEX; a++) {
- mtex = ma->mtex[a];
- if (mtex && mtex->tex) {
- id_us_min(&mtex->tex->id);
- mtex->tex = NULL;
- }
- }
-
- /* No ID refcount here... */
- ma->group = NULL;
- }
+ BKE_material_free_ex(ma, true);
+}
- BKE_animdata_free((ID *)ma);
+/* not material itself */
+void BKE_material_free_ex(Material *ma, bool do_id_user)
+{
+ MTex *mtex;
+ int a;
for (a = 0; a < MAX_MTEX; a++) {
- MEM_SAFE_FREE(ma->mtex[a]);
+ mtex = ma->mtex[a];
+ if (do_id_user && mtex && mtex->tex) mtex->tex->id.us--;
+ if (mtex) MEM_freeN(mtex);
}
- MEM_SAFE_FREE(ma->ramp_col);
- MEM_SAFE_FREE(ma->ramp_spec);
+ if (ma->ramp_col) MEM_freeN(ma->ramp_col);
+ if (ma->ramp_spec) MEM_freeN(ma->ramp_spec);
+
+ BKE_animdata_free((ID *)ma);
+
+ if (ma->preview)
+ BKE_previewimg_free(&ma->preview);
+ BKE_icon_id_delete((struct ID *)ma);
+ ma->id.icon_id = 0;
/* is no lib link block, but material extension */
if (ma->nodetree) {
- ntreeFreeTree(ma->nodetree, do_id_user);
+ ntreeFreeTree_ex(ma->nodetree, do_id_user);
MEM_freeN(ma->nodetree);
- ma->nodetree = NULL;
}
- MEM_SAFE_FREE(ma->texpaintslot);
-
- GPU_material_free(&ma->gpumaterial);
+ if (ma->texpaintslot)
+ MEM_freeN(ma->texpaintslot);
- BKE_icon_id_delete((ID *)ma);
- BKE_previewimg_free(&ma->preview);
+ if (ma->gpumaterial.first)
+ GPU_material_free(&ma->gpumaterial);
}
void init_material(Material *ma)
@@ -1766,7 +1757,7 @@ void free_matcopybuf(void)
matcopybuf.ramp_spec = NULL;
if (matcopybuf.nodetree) {
- ntreeFreeTree(matcopybuf.nodetree, false);
+ ntreeFreeTree_ex(matcopybuf.nodetree, false);
MEM_freeN(matcopybuf.nodetree);
matcopybuf.nodetree = NULL;
}
@@ -1816,7 +1807,7 @@ void paste_matcopybuf(Material *ma)
}
if (ma->nodetree) {
- ntreeFreeTree(ma->nodetree, true); /* XXX Or do_id_user? */
+ ntreeFreeTree(ma->nodetree);
MEM_freeN(ma->nodetree);
}
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 89c6a7d00b9..c09cd1aabdc 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -66,32 +66,29 @@
/* Functions */
-/**
- * Free (or release) any data used by this mball (does not free the mball itself).
- *
- * \param mb The mball to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this mball are 'released'
- * (their user count is decreased).
- */
-void BKE_mball_free(MetaBall *mb, const bool do_id_user)
+void BKE_mball_unlink(MetaBall *mb)
{
- if (do_id_user) {
- int a;
+ int a;
- for (a = 0; a < mb->totcol; a++) {
- if (mb->mat[a]) {
- id_us_min(&mb->mat[a]->id);
- mb->mat[a] = NULL;
- }
- }
+ for (a = 0; a < mb->totcol; a++) {
+ if (mb->mat[a]) mb->mat[a]->id.us--;
+ mb->mat[a] = NULL;
}
-
- BKE_animdata_free((ID *)mb);
+}
- MEM_SAFE_FREE(mb->mat);
+/* do not free mball itself */
+void BKE_mball_free(MetaBall *mb)
+{
+ BKE_mball_unlink(mb);
+
+ if (mb->adt) {
+ BKE_animdata_free((ID *)mb);
+ mb->adt = NULL;
+ }
+ if (mb->mat) MEM_freeN(mb->mat);
BLI_freelistN(&mb->elems);
- BKE_displist_free(&mb->disp);
+ if (mb->disp.first) BKE_displist_free(&mb->disp);
}
MetaBall *BKE_mball_add(Main *bmain, const char *name)
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 327025c3e9a..b948ed56c56 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -430,38 +430,32 @@ bool BKE_mesh_has_custom_loop_normals(Mesh *me)
* we need a more generic method, like the expand() functions in
* readfile.c */
-
-/**
- * Free (or release) any data used by this mesh (does not free the mesh itself).
- *
- * \param me The mesh to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this mesh are 'released'
- * (their user count is decreased).
- */
-void BKE_mesh_free(Mesh *me, const bool do_id_user)
+void BKE_mesh_unlink(Mesh *me)
{
- if (do_id_user) {
- int a;
+ int a;
- if (me->mat) {
- for (a = 0; a < me->totcol; a++) {
- if (me->mat[a]) {
- id_us_min(&me->mat[a]->id);
- me->mat[a] = NULL;
- }
- }
- }
+ if (me == NULL) return;
- if (me->key) {
- id_us_min(&me->key->id);
- me->key = NULL;
+ if (me->mat) {
+ for (a = 0; a < me->totcol; a++) {
+ if (me->mat[a]) me->mat[a]->id.us--;
+ me->mat[a] = NULL;
}
-
- /* No ID refcount here... */
- me->texcomesh = NULL;
}
- BKE_animdata_free(&me->id);
+ if (me->key) {
+ me->key->id.us--;
+ }
+ me->key = NULL;
+
+ if (me->texcomesh) me->texcomesh = NULL;
+}
+
+/* do not free mesh itself */
+void BKE_mesh_free(Mesh *me, int unlink)
+{
+ if (unlink)
+ BKE_mesh_unlink(me);
CustomData_free(&me->vdata, me->totvert);
CustomData_free(&me->edata, me->totedge);
@@ -469,10 +463,16 @@ void BKE_mesh_free(Mesh *me, const bool do_id_user)
CustomData_free(&me->ldata, me->totloop);
CustomData_free(&me->pdata, me->totpoly);
- MEM_SAFE_FREE(me->mat);
- MEM_SAFE_FREE(me->bb);
- MEM_SAFE_FREE(me->mselect);
- MEM_SAFE_FREE(me->edit_btmesh);
+ if (me->adt) {
+ BKE_animdata_free(&me->id);
+ me->adt = NULL;
+ }
+
+ if (me->mat) MEM_freeN(me->mat);
+
+ if (me->bb) MEM_freeN(me->bb);
+ if (me->mselect) MEM_freeN(me->mselect);
+ if (me->edit_btmesh) MEM_freeN(me->edit_btmesh);
}
static void mesh_tessface_clear_intern(Mesh *mesh, int free_customdata)
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index 70d36155ad5..432ae32f02b 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -44,7 +44,6 @@
#include "MEM_guardedalloc.h"
#include "DNA_constraint_types.h"
-#include "DNA_gpencil_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_movieclip_types.h"
@@ -1414,23 +1413,8 @@ void BKE_movieclip_build_proxy_frame_for_ibuf(MovieClip *clip, ImBuf *ibuf, stru
}
}
-/**
- * Free (or release) any data used by this lamp (does not free the lamp itself).
- *
- * \param la The lamp to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this lamp are 'released'
- * (their user count is decreased).
- */
-void BKE_movieclip_free(MovieClip *clip, const bool do_id_user)
+void BKE_movieclip_free(MovieClip *clip)
{
- if (do_id_user) {
- if (clip->gpd) {
- id_us_min(&clip->gpd->id);
- clip->gpd = NULL;
- }
- }
-
- /* Also frees animdata. */
free_buffers(clip);
BKE_tracking_free(&clip->tracking);
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index b256e11c538..c656931d18b 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -38,7 +38,6 @@
#include "DNA_action_types.h"
#include "DNA_anim_types.h"
-#include "DNA_gpencil_types.h"
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
#include "DNA_node_types.h"
@@ -1776,35 +1775,21 @@ static void free_localized_node_groups(bNodeTree *ntree)
for (node = ntree->nodes.first; node; node = node->next) {
if (node->type == NODE_GROUP && node->id) {
bNodeTree *ngroup = (bNodeTree *)node->id;
- ntreeFreeTree(ngroup, false);
+ ntreeFreeTree_ex(ngroup, false);
MEM_freeN(ngroup);
}
}
}
-/**
- * Free (or release) any data used by this nodetree (does not free the nodetree itself).
- *
- * \param ntree The nodetree to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this nodetree are 'released'
- * (their user count is decreased).
- */
-void ntreeFreeTree(bNodeTree *ntree, const bool do_id_user)
+/* do not free ntree itself here, BKE_libblock_free calls this function too */
+void ntreeFreeTree_ex(bNodeTree *ntree, const bool do_id_user)
{
bNodeTree *tntree;
bNode *node, *next;
bNodeSocket *sock, *nextsock;
-
- if (do_id_user) {
- if (ntree->gpd) {
- id_us_min(&ntree->gpd->id);
- ntree->gpd = NULL;
- }
- /* XXX See comment below about id used by nodes... */
- }
-
- BKE_animdata_free((ID *)ntree);
-
+
+ if (ntree == NULL) return;
+
/* XXX hack! node trees should not store execution graphs at all.
* This should be removed when old tree types no longer require it.
* Currently the execution data for texture nodes remains in the tree
@@ -1828,6 +1813,10 @@ void ntreeFreeTree(bNodeTree *ntree, const bool do_id_user)
/* unregister associated RNA types */
ntreeInterfaceTypeFree(ntree);
+ BKE_animdata_free((ID *)ntree);
+
+ id_us_min((ID *)ntree->gpd);
+
BLI_freelistN(&ntree->links); /* do first, then unlink_node goes fast */
for (node = ntree->nodes.first; node; node = next) {
@@ -1878,6 +1867,11 @@ void ntreeFreeTree(bNodeTree *ntree, const bool do_id_user)
BKE_libblock_free_data(G.main, &ntree->id);
}
}
+/* same as ntreeFreeTree_ex but always manage users */
+void ntreeFreeTree(bNodeTree *ntree)
+{
+ ntreeFreeTree_ex(ntree, true);
+}
void ntreeFreeCache(bNodeTree *ntree)
{
@@ -2151,7 +2145,7 @@ void ntreeLocalMerge(bNodeTree *localtree, bNodeTree *ntree)
if (ntree->typeinfo->local_merge)
ntree->typeinfo->local_merge(localtree, ntree);
- ntreeFreeTree(localtree, false);
+ ntreeFreeTree_ex(localtree, false);
MEM_freeN(localtree);
}
}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 4ef30c06fe5..e5f826f670d 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -40,7 +40,6 @@
#include "DNA_armature_types.h"
#include "DNA_camera_types.h"
#include "DNA_constraint_types.h"
-#include "DNA_gpencil_types.h"
#include "DNA_group_types.h"
#include "DNA_key_types.h"
#include "DNA_lamp_types.h"
@@ -380,63 +379,55 @@ void BKE_object_free_caches(Object *object)
}
}
-/**
- * Free (or release) any data used by this object (does not free the object itself).
- *
- * \param ob The object to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this object are 'released'
- * (their user count is decreased).
- */
-void BKE_object_free(Object *ob, const bool do_id_user)
+/* do not free object itself */
+void BKE_object_free_ex(Object *ob, bool do_id_user)
{
- /* Needs valid obdata pointer... */
+ int a;
+
BKE_object_free_derived_caches(ob);
-
- if (do_id_user) {
- /* Note: This totally ignores indirectly-'linked' datablocks (through constraints, modifiers...).
- * That’s fine for now (none of them actually refcount IDs), remap project will rework this deeply anyway. */
- int a;
-
- if (ob->data) {
- id_us_min((ID *)ob->data);
- ob->data = NULL;
- }
-
- if (ob->mat) {
- for (a = 0; a < ob->totcol; a++) {
- if (ob->mat[a]) {
- id_us_min(&ob->mat[a]->id);
- ob->mat[a] = NULL;
- }
+
+ /* disconnect specific data, but not for lib data (might be indirect data, can get relinked) */
+ if (ob->data) {
+ ID *id = ob->data;
+ id->us--;
+ if (id->us == 0 && id->lib == NULL) {
+ switch (ob->type) {
+ case OB_MESH:
+ BKE_mesh_unlink((Mesh *)id);
+ break;
+ case OB_CURVE:
+ BKE_curve_unlink((Curve *)id);
+ break;
+ case OB_MBALL:
+ BKE_mball_unlink((MetaBall *)id);
+ break;
}
}
+ ob->data = NULL;
+ }
- if (ob->poselib) {
- id_us_min(&ob->poselib->id);
- ob->poselib = NULL;
- }
- if (ob->gpd) {
- id_us_min(&ob->gpd->id);
- ob->gpd = NULL;
+ if (ob->mat) {
+ for (a = 0; a < ob->totcol; a++) {
+ if (ob->mat[a]) ob->mat[a]->id.us--;
}
+ MEM_freeN(ob->mat);
}
-
- BKE_animdata_free((ID *)ob);
-
- MEM_SAFE_FREE(ob->mat);
- MEM_SAFE_FREE(ob->matbits);
- MEM_SAFE_FREE(ob->iuser);
- MEM_SAFE_FREE(ob->bb);
-
- BLI_freelistN(&ob->defbase);
- if (ob->pose) {
+ if (ob->matbits) MEM_freeN(ob->matbits);
+ ob->mat = NULL;
+ ob->matbits = NULL;
+ if (ob->iuser) MEM_freeN(ob->iuser);
+ ob->iuser = NULL;
+ if (ob->bb) MEM_freeN(ob->bb);
+ ob->bb = NULL;
+ if (ob->adt) BKE_animdata_free((ID *)ob);
+ if (ob->poselib) ob->poselib->id.us--;
+ if (ob->gpd) ((ID *)ob->gpd)->us--;
+ if (ob->defbase.first)
+ BLI_freelistN(&ob->defbase);
+ if (ob->pose)
BKE_pose_free_ex(ob->pose, do_id_user);
- ob->pose = NULL;
- }
- if (ob->mpath) {
+ if (ob->mpath)
animviz_free_motionpath(ob->mpath);
- ob->mpath = NULL;
- }
BKE_bproperty_free_list(&ob->prop);
BKE_object_free_modifiers(ob);
@@ -450,19 +441,13 @@ void BKE_object_free(Object *ob, const bool do_id_user)
BKE_rigidbody_free_object(ob);
BKE_rigidbody_free_constraint(ob);
- if (ob->soft) {
- sbFree(ob->soft);
- ob->soft = NULL;
- }
- if (ob->bsoft) {
- bsbFree(ob->bsoft);
- ob->bsoft = NULL;
- }
- GPU_lamp_free(ob);
+ if (ob->soft) sbFree(ob->soft);
+ if (ob->bsoft) bsbFree(ob->bsoft);
+ if (ob->gpulamp.first) GPU_lamp_free(ob);
BKE_sculptsession_free(ob);
- BLI_freelistN(&ob->pc_ids);
+ if (ob->pc_ids.first) BLI_freelistN(&ob->pc_ids);
BLI_freelistN(&ob->lodlevels);
@@ -472,12 +457,16 @@ void BKE_object_free(Object *ob, const bool do_id_user)
if (ob->curve_cache->path)
free_path(ob->curve_cache->path);
MEM_freeN(ob->curve_cache);
- ob->curve_cache = NULL;
}
BKE_previewimg_free(&ob->preview);
}
+void BKE_object_free(Object *ob)
+{
+ BKE_object_free_ex(ob, true);
+}
+
static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Object **obpoin, int UNUSED(cd_flag))
{
Object *unlinkOb = userData;
@@ -489,9 +478,6 @@ static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Objec
}
}
-/* XXX Horrific! This pretty much re-does BKE_library_foreach_ID_link() and
- * BKE_library_callback_free_editor_id_reference_set() & co...
- * TODO This is to be replaced by/merged in more generic 'id-remap' process being worked on in same-named branch... */
void BKE_object_unlink(Object *ob)
{
Main *bmain = G.main;
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 90c07280a61..06844b09a9b 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -298,17 +298,13 @@ void BKE_paint_brush_set(Paint *p, Brush *br)
}
}
-/**
- * Free (or release) any data used by this paint curve (does not free the pcurve itself).
- *
- * \param pc The paint curve to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this paint curve are 'released'
- * (their user count is decreased).
- */
-void BKE_paint_curve_free(PaintCurve *pc, const bool UNUSED(do_id_user))
+void BKE_paint_curve_free(PaintCurve *pc)
{
- MEM_SAFE_FREE(pc->points);
- pc->tot_points = 0;
+ if (pc->points) {
+ MEM_freeN(pc->points);
+ pc->points = NULL;
+ pc->tot_points = 0;
+ }
}
PaintCurve *BKE_paint_curve_add(Main *bmain, const char *name)
@@ -382,14 +378,7 @@ Palette *BKE_palette_add(Main *bmain, const char *name)
return palette;
}
-/**
- * Free (or release) any data used by this palette (does not free the palette itself).
- *
- * \param palette The palette to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this palette are 'released'
- * (their user count is decreased).
- */
-void BKE_palette_free(Palette *palette, const bool UNUSED(do_id_user))
+void BKE_palette_free(Palette *palette)
{
BLI_freelistN(&palette->colors);
}
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 90c9a71f4ee..9aacba8d02e 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -371,40 +371,12 @@ static void fluid_free_settings(SPHFluidSettings *fluid)
MEM_freeN(fluid);
}
-/**
- * Free (or release) any data used by this particle settings (does not free the partsett itself).
- *
- * \param part The particle settings to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this partsett are 'released'
- * (their user count is decreased).
- */
-void BKE_particlesettings_free(ParticleSettings *part, const bool do_id_user)
+void BKE_particlesettings_free(ParticleSettings *part)
{
+ MTex *mtex;
int a;
-
- if (do_id_user) {
- MTex *mtex;
-
- for (a = 0; a < MAX_MTEX; a++) {
- mtex = part->mtex[a];
- if (mtex && mtex->tex) {
- id_us_min(&mtex->tex->id);
- mtex->tex = NULL;
- }
- }
-
- /* No ID refcount here... */
- part->dup_group = NULL;
- part->dup_ob = NULL;
- part->bb_ob = NULL;
- }
-
BKE_animdata_free(&part->id);
- for (a = 0; a < MAX_MTEX; a++) {
- MEM_SAFE_FREE(part->mtex[a]);
- }
-
if (part->clumpcurve)
curvemapping_free(part->clumpcurve);
if (part->roughcurve)
@@ -413,13 +385,19 @@ void BKE_particlesettings_free(ParticleSettings *part, const bool do_id_user)
free_partdeflect(part->pd);
free_partdeflect(part->pd2);
- MEM_SAFE_FREE(part->effector_weights);
+ if (part->effector_weights)
+ MEM_freeN(part->effector_weights);
BLI_freelistN(&part->dupliweights);
boid_free_settings(part->boids);
fluid_free_settings(part->fluid);
+ for (a = 0; a < MAX_MTEX; a++) {
+ mtex = part->mtex[a];
+ if (mtex && mtex->tex) mtex->tex->id.us--;
+ if (mtex) MEM_freeN(mtex);
+ }
}
void free_hair(Object *UNUSED(ob), ParticleSystem *psys, int dynamics)
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 8f0437109a5..1ccc213006a 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -360,73 +360,41 @@ void BKE_scene_groups_relink(Scene *sce)
BKE_rigidbody_world_groups_relink(sce->rigidbody_world);
}
-/**
- * Free (or release) any data used by this scene (does not free the scene itself).
- *
- * \param sce The scene to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this scene are 'released'
- * (their user count is decreased).
- */
-void BKE_scene_free(Scene *sce, const bool do_id_user)
+/* do not free scene itself */
+void BKE_scene_free(Scene *sce)
{
+ Base *base;
SceneRenderLayer *srl;
- if (do_id_user) {
- Base *base;
-
- for (base = sce->base.first; base; base = base->next) {
- id_us_min(&base->object->id);
- base->object = NULL;
- }
- /* do not free objects! */
-
- if (sce->world) {
- id_us_min(&sce->world->id);
- sce->world = NULL;
- }
-
- BLI_assert(sce->obedit == NULL);
+ /* check all sequences */
+ BKE_sequencer_clear_scene_in_allseqs(G.main, sce);
- if (sce->gpd) {
- /* XXX TODO Fix This! */
-#if 0 /* removed since this can be invalid memory when freeing everything */
- /* since the grease pencil data is freed before the scene.
- * since grease pencil data is not (yet?), shared between objects
- * its probably safe not to do this, some save and reload will free this. */
- id_us_min(&sce->gpd->id);
+ base = sce->base.first;
+ while (base) {
+ base->object->id.us--;
+ base = base->next;
+ }
+ /* do not free objects! */
+
+ if (sce->gpd) {
+#if 0 /* removed since this can be invalid memory when freeing everything */
+ /* since the grease pencil data is freed before the scene.
+ * since grease pencil data is not (yet?), shared between objects
+ * its probably safe not to do this, some save and reload will free this. */
+ sce->gpd->id.us--;
#endif
- sce->gpd = NULL;
- }
-
- /* No ID refcount here... */
- sce->camera = NULL;
- sce->set = NULL;
- sce->clip = NULL;
+ sce->gpd = NULL;
}
- BKE_animdata_free((ID *)sce);
-
- /* check all sequences */
- BKE_sequencer_clear_scene_in_allseqs(G.main, sce);
-
- sce->basact = NULL;
BLI_freelistN(&sce->base);
BKE_sequencer_editing_free(sce);
+ BKE_animdata_free((ID *)sce);
BKE_keyingsets_free(&sce->keyingsets);
-
- /* is no lib link block, but scene extension */
- if (sce->nodetree) {
- ntreeFreeTree(sce->nodetree, do_id_user);
- MEM_freeN(sce->nodetree);
- sce->nodetree = NULL;
- }
-
- if (sce->rigidbody_world) {
+
+ if (sce->rigidbody_world)
BKE_rigidbody_free_world(sce->rigidbody_world);
- sce->rigidbody_world = NULL;
- }
-
+
if (sce->r.avicodecdata) {
free_avicodecdata(sce->r.avicodecdata);
MEM_freeN(sce->r.avicodecdata);
@@ -479,8 +447,15 @@ void BKE_scene_free(Scene *sce, const bool do_id_user)
if (sce->depsgraph)
DEG_graph_free(sce->depsgraph);
- MEM_SAFE_FREE(sce->stats);
- MEM_SAFE_FREE(sce->fps_info);
+ if (sce->nodetree) {
+ ntreeFreeTree(sce->nodetree);
+ MEM_freeN(sce->nodetree);
+ }
+
+ if (sce->stats)
+ MEM_freeN(sce->stats);
+ if (sce->fps_info)
+ MEM_freeN(sce->fps_info);
BKE_sound_destroy_scene(sce);
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 4dd67f5ecff..7401ef28f62 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -357,19 +357,11 @@ void BKE_screen_area_free(ScrArea *sa)
BLI_freelistN(&sa->actionzones);
}
-/**
- * Free (or release) any data used by this screen (does not free the screen itself).
- *
- * \param sc The screen to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this screen are 'released'
- * (their user count is decreased).
- */
-void BKE_screen_free(bScreen *sc, const bool UNUSED(do_id_user))
+/* don't free screen itself */
+void BKE_screen_free(bScreen *sc)
{
ScrArea *sa, *san;
ARegion *ar;
-
- /* No animdata here. */
for (ar = sc->regionbase.first; ar; ar = ar->next)
BKE_area_region_free(NULL, ar);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index fe197fb4122..fc8fa616d20 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -3036,7 +3036,7 @@ static ImBuf *seq_render_mask(const SeqRenderData *context, Mask *mask, float nr
BKE_maskrasterize_handle_init(mr_handle, mask_temp, context->rectx, context->recty, true, true, true);
- BKE_mask_free(mask_temp, false);
+ BKE_mask_free_nolib(mask_temp);
MEM_freeN(mask_temp);
BKE_maskrasterize_buffer(mr_handle, context->rectx, context->recty, maskbuf);
@@ -5026,7 +5026,7 @@ Sequence *BKE_sequencer_add_sound_strip(bContext *C, ListBase *seqbasep, SeqLoad
info = AUD_getInfo(sound->playback_handle);
if (info.specs.channels == AUD_CHANNELS_INVALID) {
- BKE_libblock_free(bmain, sound);
+ BKE_sound_delete(bmain, sound);
#if 0
if (op)
BKE_report(op->reports, RPT_ERROR, "Unsupported audio format");
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 53d6d8b5d10..7e7cc8745fd 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -123,17 +123,8 @@ bSound *BKE_sound_new_file_exists(struct Main *bmain, const char *filepath)
return BKE_sound_new_file_exists_ex(bmain, filepath, NULL);
}
-/**
- * Free (or release) any data used by this sound (does not free the sound itself).
- *
- * \param sound The sound to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this sound are 'released'
- * (their user count is decreased).
- */
-void BKE_sound_free(bSound *sound, const bool UNUSED(do_id_user))
+void BKE_sound_free(bSound *sound)
{
- /* No animdata here. */
-
if (sound->packedfile) {
freePackedFile(sound->packedfile);
sound->packedfile = NULL;
@@ -157,7 +148,8 @@ void BKE_sound_free(bSound *sound, const bool UNUSED(do_id_user))
BLI_spin_end(sound->spinlock);
MEM_freeN(sound->spinlock);
sound->spinlock = NULL;
- }
+ }
+
#endif /* WITH_AUDASPACE */
}
@@ -323,6 +315,15 @@ bSound *BKE_sound_new_limiter(struct Main *bmain, bSound *source, float start, f
}
#endif
+void BKE_sound_delete(struct Main *bmain, bSound *sound)
+{
+ if (sound) {
+ BKE_sound_free(sound);
+
+ BKE_libblock_free(bmain, sound);
+ }
+}
+
void BKE_sound_cache(bSound *sound)
{
sound->flags |= SOUND_FLAGS_CACHING;
diff --git a/source/blender/blenkernel/intern/speaker.c b/source/blender/blenkernel/intern/speaker.c
index 96a6dc35a1a..7a800555144 100644
--- a/source/blender/blenkernel/intern/speaker.c
+++ b/source/blender/blenkernel/intern/speaker.c
@@ -125,21 +125,10 @@ void BKE_speaker_make_local(Speaker *spk)
}
}
-/**
- * Free (or release) any data used by this speaker (does not free the speaker itself).
- *
- * \param spk The speaker to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this speaker are 'released'
- * (their user count is decreased).
- */
-void BKE_speaker_free(Speaker *spk, const bool do_id_user)
+void BKE_speaker_free(Speaker *spk)
{
- if (do_id_user) {
- if (spk->sound) {
- id_us_min(&spk->sound->id);
- spk->sound = NULL;
- }
- }
+ if (spk->sound)
+ spk->sound->id.us--;
BKE_animdata_free((ID *)spk);
}
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index d5d2e169aa3..77d6043d6f3 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -152,19 +152,10 @@ static void init_undo_text(Text *text)
text->undo_buf = MEM_mallocN(text->undo_len, "undo buf");
}
-/**
- * Free (or release) any data used by this text (does not free the text itself).
- *
- * \param text The text to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this text are 'released'
- * (their user count is decreased).
- */
-void BKE_text_free(Text *text, const bool UNUSED(do_id_user))
+void BKE_text_free(Text *text)
{
TextLine *tmp;
- /* No animdata here. */
-
for (tmp = text->lines.first; tmp; tmp = tmp->next) {
MEM_freeN(tmp->line);
if (tmp->format)
@@ -173,10 +164,10 @@ void BKE_text_free(Text *text, const bool UNUSED(do_id_user))
BLI_freelistN(&text->lines);
- MEM_SAFE_FREE(text->name);
- MEM_SAFE_FREE(text->undo_buf);
+ if (text->name) MEM_freeN(text->name);
+ MEM_freeN(text->undo_buf);
#ifdef WITH_PYTHON
- BPY_text_free_code(text);
+ if (text->compiled) BPY_text_free_code(text);
#endif
}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index ef1863e555b..88a412d5e95 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -557,51 +557,23 @@ int colorband_element_remove(struct ColorBand *coba, int index)
/* ******************* TEX ************************ */
-/**
- * Free (or release) any data used by this texture (does not free the texure itself).
- *
- * \param te The texure to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this texture are 'released'
- * (their user count is decreased).
- */
-void BKE_texture_free(Tex *tex, const bool do_id_user)
+void BKE_texture_free(Tex *tex)
{
- if (do_id_user) {
- if (tex->ima) {
- id_us_min(&tex->ima->id);
- tex->ima = NULL;
- }
- }
-
- BKE_animdata_free((ID *)tex);
-
- /* is no lib link block, but texture extension */
+ if (tex->coba) MEM_freeN(tex->coba);
+ if (tex->env) BKE_texture_envmap_free(tex->env);
+ if (tex->pd) BKE_texture_pointdensity_free(tex->pd);
+ if (tex->vd) BKE_texture_voxeldata_free(tex->vd);
+ if (tex->ot) BKE_texture_ocean_free(tex->ot);
+ BKE_animdata_free((struct ID *)tex);
+
+ BKE_previewimg_free(&tex->preview);
+ BKE_icon_id_delete((struct ID *)tex);
+ tex->id.icon_id = 0;
+
if (tex->nodetree) {
- ntreeFreeTree(tex->nodetree, do_id_user);
+ ntreeFreeTree(tex->nodetree);
MEM_freeN(tex->nodetree);
- tex->nodetree = NULL;
}
-
- MEM_SAFE_FREE(tex->coba);
- if (tex->env) {
- BKE_texture_envmap_free(tex->env);
- tex->env = NULL;
- }
- if (tex->pd) {
- BKE_texture_pointdensity_free(tex->pd);
- tex->pd = NULL;
- }
- if (tex->vd) {
- BKE_texture_voxeldata_free(tex->vd);
- tex->vd = NULL;
- }
- if (tex->ot) {
- BKE_texture_ocean_free(tex->ot);
- tex->ot = NULL;
- }
-
- BKE_icon_id_delete((ID *)tex);
- BKE_previewimg_free(&tex->preview);
}
/* ------------------------------------------------------------------------- */
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index 95fa0679a99..e4736b1f54c 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -51,46 +51,36 @@
#include "GPU_material.h"
-/**
- * Free (or release) any data used by this world (does not free the world itself).
- *
- * \param wrld The world to free.
- * \param do_id_user When \a true, ID datablocks used (referenced) by this world are 'released'
- * (their user count is decreased).
- */
-void BKE_world_free(World *wrld, const bool do_id_user)
+void BKE_world_free_ex(World *wrld, bool do_id_user)
{
+ MTex *mtex;
int a;
-
- if (do_id_user) {
- MTex *mtex;
-
- for (a = 0; a < MAX_MTEX; a++) {
- mtex = wrld->mtex[a];
- if (mtex && mtex->tex) {
- id_us_min(&mtex->tex->id);
- mtex->tex = NULL;
- }
- }
+
+ for (a = 0; a < MAX_MTEX; a++) {
+ mtex = wrld->mtex[a];
+ if (do_id_user && mtex && mtex->tex) mtex->tex->id.us--;
+ if (mtex) MEM_freeN(mtex);
}
+ BKE_previewimg_free(&wrld->preview);
BKE_animdata_free((ID *)wrld);
- for (a = 0; a < MAX_MTEX; a++) {
- MEM_SAFE_FREE(wrld->mtex[a]);
- }
-
/* is no lib link block, but world extension */
if (wrld->nodetree) {
- ntreeFreeTree(wrld->nodetree, do_id_user);
+ ntreeFreeTree_ex(wrld->nodetree, do_id_user);
MEM_freeN(wrld->nodetree);
- wrld->nodetree = NULL;
}
- GPU_material_free(&wrld->gpumaterial);
+ if (wrld->gpumaterial.first)
+ GPU_material_free(&wrld->gpumaterial);
BKE_icon_id_delete((struct ID *)wrld);
- BKE_previewimg_free(&wrld->preview);
+ wrld->id.icon_id = 0;
+}
+
+void BKE_world_free(World *wrld)
+{
+ BKE_world_free_ex(wrld, true);
}
World *add_world(Main *bmain, const char *name)
diff --git a/source/blender/compositor/operations/COM_MaskOperation.cpp b/source/blender/compositor/operations/COM_MaskOperation.cpp
index 5202134833e..220b4e908a6 100644
--- a/source/blender/compositor/operations/COM_MaskOperation.cpp
+++ b/source/blender/compositor/operations/COM_MaskOperation.cpp
@@ -94,7 +94,7 @@ void MaskOperation::initExecution()
frame_iter += frame_step;
}
- BKE_mask_free(mask_temp, false);
+ BKE_mask_free_nolib(mask_temp);
MEM_freeN(mask_temp);
}
}
diff --git a/source/blender/editors/gpencil/gpencil_undo.c b/source/blender/editors/gpencil/gpencil_undo.c
index eaa0cd5563c..34e640a4b7b 100644
--- a/source/blender/editors/gpencil/gpencil_undo.c
+++ b/source/blender/editors/gpencil/gpencil_undo.c
@@ -140,7 +140,7 @@ void gpencil_undo_push(bGPdata *gpd)
*/
undo_node->gpd->adt = NULL;
- BKE_gpencil_free(undo_node->gpd, false);
+ BKE_gpencil_free(undo_node->gpd);
MEM_freeN(undo_node->gpd);
BLI_freelinkN(&undo_nodes, undo_node);
@@ -168,7 +168,7 @@ void gpencil_undo_finish(void)
*/
undo_node->gpd->adt = NULL;
- BKE_gpencil_free(undo_node->gpd, false);
+ BKE_gpencil_free(undo_node->gpd);
MEM_freeN(undo_node->gpd);
undo_node = undo_node->next;
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index 736fef58a09..c101b416169 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -591,7 +591,7 @@ static void free_undo(void *me_v)
{
Mesh *me = me_v;
if (me->key) {
- BKE_key_free(me->key, false);
+ BKE_key_free(me->key);
MEM_freeN(me->key);
}
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index 9525e88bd6f..2491685161c 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -552,7 +552,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
}
#endif
- BKE_key_free(nkey, true);
+ BKE_key_free(nkey);
BLI_remlink(&bmain->key, nkey);
MEM_freeN(nkey);
}
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index 575faa57033..6dfd2b31d30 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -828,7 +828,7 @@ static void shader_preview_free(void *customdata)
/* get rid of copied material */
BLI_remlink(&pr_main->mat, sp->matcopy);
- BKE_material_free(sp->matcopy, false);
+ BKE_material_free_ex(sp->matcopy, false);
properties = IDP_GetProperties((ID *)sp->matcopy, false);
if (properties) {
@@ -844,7 +844,7 @@ static void shader_preview_free(void *customdata)
/* get rid of copied texture */
BLI_remlink(&pr_main->tex, sp->texcopy);
- BKE_texture_free(sp->texcopy, false);
+ BKE_texture_free(sp->texcopy);
properties = IDP_GetProperties((ID *)sp->texcopy, false);
if (properties) {
@@ -860,7 +860,7 @@ static void shader_preview_free(void *customdata)
/* get rid of copied world */
BLI_remlink(&pr_main->world, sp->worldcopy);
- BKE_world_free(sp->worldcopy, true); /* [#32865] - we need to unlink the texture copies, unlike for materials */
+ BKE_world_free_ex(sp->worldcopy, true); /* [#32865] - we need to unlink the texture copies, unlike for materials */
properties = IDP_GetProperties((ID *)sp->worldcopy, false);
if (properties) {
@@ -876,7 +876,7 @@ static void shader_preview_free(void *customdata)
/* get rid of copied lamp */
BLI_remlink(&pr_main->lamp, sp->lampcopy);
- BKE_lamp_free(sp->lampcopy, true);
+ BKE_lamp_free(sp->lampcopy);
properties = IDP_GetProperties((ID *)sp->lampcopy, false);
if (properties) {
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index f368f786a46..1a1cc8894e6 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -494,7 +494,7 @@ static void screen_copy(bScreen *to, bScreen *from)
ScrArea *sa, *saf;
/* free contents of 'to', is from blenkernel screen.c */
- BKE_screen_free(to, false);
+ BKE_screen_free(to);
BLI_duplicatelist(&to->vertbase, &from->vertbase);
BLI_duplicatelist(&to->edgebase, &from->edgebase);
@@ -1903,7 +1903,7 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow *win, ScrArea *sa, const s
ED_screen_set(C, sc);
- BKE_screen_free(oldscreen, false);
+ BKE_screen_free(oldscreen);
BKE_libblock_free(CTX_data_main(C), oldscreen);
/* After we've restored back to SCREENNORMAL, we have to wait with
diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c
index d34f57577be..f8d84cc0276 100644
--- a/source/blender/editors/sound/sound_ops.c
+++ b/source/blender/editors/sound/sound_ops.c
@@ -116,7 +116,7 @@ static int sound_open_exec(bContext *C, wmOperator *op)
info = AUD_getInfo(sound->playback_handle);
if (info.specs.channels == AUD_CHANNELS_INVALID) {
- BKE_libblock_free(bmain, sound);
+ BKE_sound_delete(bmain, sound);
if (op->customdata) MEM_freeN(op->customdata);
BKE_report(op->reports, RPT_ERROR, "Unsupported audio format");
return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/space_node/node_group.c b/source/blender/editors/space_node/node_group.c
index cdbdf48f1ba..b57f95db4e6 100644
--- a/source/blender/editors/space_node/node_group.c
+++ b/source/blender/editors/space_node/node_group.c
@@ -623,7 +623,7 @@ static bool node_group_make_test_selected(bNodeTree *ntree, bNode *gnode, const
}
/* free local pseudo node tree again */
- ntreeFreeTree(ngroup, true);
+ ntreeFreeTree(ngroup);
MEM_freeN(ngroup);
if (!ok)
return false;
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index fdb5d952e30..5a0da0b7651 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -733,7 +733,7 @@ static Mask *rna_Main_mask_new(Main *bmain, const char *name)
static void rna_Main_masks_remove(Main *bmain, PointerRNA *mask_ptr)
{
Mask *mask = mask_ptr->data;
- BKE_mask_unlink(bmain, mask);
+ BKE_mask_free(bmain, mask);
BKE_libblock_free(bmain, mask);
RNA_POINTER_INVALIDATE(mask_ptr);
}
@@ -742,6 +742,7 @@ static void rna_Main_grease_pencil_remove(Main *bmain, ReportList *reports, Poin
{
bGPdata *gpd = gpd_ptr->data;
if (ID_REAL_USERS(gpd) <= 0) {
+ BKE_gpencil_free(gpd);
BKE_libblock_free(bmain, gpd);
RNA_POINTER_INVALIDATE(gpd_ptr);
}
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index c3dbe2b5fe3..c4ec55c8d06 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -209,7 +209,7 @@ void ntreeGPUMaterialNodes(bNodeTree *ntree, GPUMaterial *mat, short compatibili
ntreeExecGPUNodes(exec, mat, 1, compatibility);
ntreeShaderEndExecTree(exec);
- ntreeFreeTree(localtree, false);
+ ntreeFreeTree_ex(localtree, false);
MEM_freeN(localtree);
}
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index 2f3f69a7245..b282ec0593e 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -3655,8 +3655,7 @@ void RE_free_sample_material(Material *mat)
MTex *mtex= mat->mtex[tex_nr];
if (mtex->tex) {
- /* don't update user counts as we are freeing a duplicate */
- BKE_texture_free(mtex->tex, false);
+ BKE_texture_free(mtex->tex);
MEM_freeN(mtex->tex);
mtex->tex = NULL;
}
@@ -3664,7 +3663,7 @@ void RE_free_sample_material(Material *mat)
}
/* don't update user counts as we are freeing a duplicate */
- BKE_material_free(mat, false);
+ BKE_material_free_ex(mat, false);
MEM_freeN(mat);
}