From db5120603f8f6236d1417199f257e35e0eb8c00b Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Thu, 16 May 2019 14:11:11 +0200 Subject: Refactor: Simplify ID Property freeing This also makes `IDP_CopyProperty` the "opposite" of `IDP_FreeProperty`, which is what I'd expect. Two refactoring steps: * rename IDP_FreeProperty to IDP_FreePropertyContent * new IDP_FreeProperty function that actually frees the property Reviewers: brecht Differential Revision: https://developer.blender.org/D4872 --- source/blender/blenkernel/BKE_idprop.h | 1 + source/blender/blenkernel/intern/action.c | 2 -- source/blender/blenkernel/intern/addon.c | 1 - source/blender/blenkernel/intern/armature.c | 2 -- source/blender/blenkernel/intern/blender.c | 2 -- .../blender/blenkernel/intern/blender_user_menu.c | 1 - source/blender/blenkernel/intern/constraint.c | 1 - source/blender/blenkernel/intern/fmodifier.c | 1 - source/blender/blenkernel/intern/idprop.c | 31 +++++++++------------- source/blender/blenkernel/intern/layer.c | 1 - source/blender/blenkernel/intern/node.c | 1 - source/blender/blenkernel/intern/object.c | 3 +-- source/blender/blenkernel/intern/scene.c | 1 - source/blender/blenkernel/intern/screen.c | 1 - source/blender/blenkernel/intern/workspace.c | 1 - source/blender/blenkernel/intern/writeffmpeg.c | 4 +-- 16 files changed, 16 insertions(+), 38 deletions(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h index e6f3d7b4a99..0e54cbc76fc 100644 --- a/source/blender/blenkernel/BKE_idprop.h +++ b/source/blender/blenkernel/BKE_idprop.h @@ -135,6 +135,7 @@ struct IDProperty *IDP_New(const char type, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); void IDP_FreeProperty_ex(struct IDProperty *prop, const bool do_id_user); +void IDP_FreePropertyContent(struct IDProperty *prop); void IDP_FreeProperty(struct IDProperty *prop); void IDP_ClearProperty(IDProperty *prop); diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 34c50865073..65b837048cb 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -822,7 +822,6 @@ void BKE_pose_channel_free_ex(bPoseChannel *pchan, bool do_id_user) if (pchan->prop) { IDP_FreeProperty(pchan->prop); - MEM_freeN(pchan->prop); } /* Cached data, for new draw manager rendering code. */ @@ -964,7 +963,6 @@ void BKE_pose_channel_copy_data(bPoseChannel *pchan, const bPoseChannel *pchan_f if (pchan->prop) { /* unlikely but possible it exists */ IDP_FreeProperty(pchan->prop); - MEM_freeN(pchan->prop); pchan->prop = NULL; } if (pchan_from->prop) { diff --git a/source/blender/blenkernel/intern/addon.c b/source/blender/blenkernel/intern/addon.c index 486da61fe68..99ef38722f5 100644 --- a/source/blender/blenkernel/intern/addon.c +++ b/source/blender/blenkernel/intern/addon.c @@ -81,7 +81,6 @@ void BKE_addon_free(bAddon *addon) { if (addon->prop) { IDP_FreeProperty(addon->prop); - MEM_freeN(addon->prop); } MEM_freeN(addon); } diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index bd9907acb24..df22aa1dcfb 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -112,7 +112,6 @@ void BKE_armature_bonelist_free(ListBase *lb) for (bone = lb->first; bone; bone = bone->next) { if (bone->prop) { IDP_FreeProperty(bone->prop); - MEM_freeN(bone->prop); } BKE_armature_bonelist_free(&bone->childbase); } @@ -2430,7 +2429,6 @@ static void pose_proxy_synchronize(Object *ob, Object *from, int layer_protected } if (prop_orig) { IDP_FreeProperty(prop_orig); - MEM_freeN(prop_orig); } } } diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 48b271cf277..9fd3c24092c 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -155,7 +155,6 @@ static void keymap_item_free(wmKeyMapItem *kmi) { if (kmi->properties) { IDP_FreeProperty(kmi->properties); - MEM_freeN(kmi->properties); } if (kmi->ptr) { MEM_freeN(kmi->ptr); @@ -212,7 +211,6 @@ static void userdef_free_keyconfig_prefs(UserDef *userdef) kpt = kpt_next) { kpt_next = kpt->next; IDP_FreeProperty(kpt->prop); - MEM_freeN(kpt->prop); MEM_freeN(kpt); } BLI_listbase_clear(&userdef->user_keyconfig_prefs); diff --git a/source/blender/blenkernel/intern/blender_user_menu.c b/source/blender/blenkernel/intern/blender_user_menu.c index 911f3fdc7b2..ad34ef03e04 100644 --- a/source/blender/blenkernel/intern/blender_user_menu.c +++ b/source/blender/blenkernel/intern/blender_user_menu.c @@ -97,7 +97,6 @@ void BKE_blender_user_menu_item_free(bUserMenuItem *umi) bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)umi; if (umi_op->prop) { IDP_FreeProperty(umi_op->prop); - MEM_freeN(umi_op->prop); } } MEM_freeN(umi); diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index c680e15763d..04789adea2f 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -2113,7 +2113,6 @@ static void pycon_free(bConstraint *con) /* id-properties */ IDP_FreeProperty(data->prop); - MEM_freeN(data->prop); /* multiple targets */ BLI_freelistN(&data->targets); diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c index c6188642e41..794d07203af 100644 --- a/source/blender/blenkernel/intern/fmodifier.c +++ b/source/blender/blenkernel/intern/fmodifier.c @@ -867,7 +867,6 @@ static void fcm_python_free(FModifier *fcm) /* id-properties */ IDP_FreeProperty(data->prop); - MEM_freeN(data->prop); } static void fcm_python_new_data(void *mdata) diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c index 39e72d7e3a8..c62b7454e67 100644 --- a/source/blender/blenkernel/intern/idprop.c +++ b/source/blender/blenkernel/intern/idprop.c @@ -142,7 +142,7 @@ void IDP_SetIndexArray(IDProperty *prop, int index, IDProperty *item) old = GETPROP(prop, index); if (item != old) { - IDP_FreeProperty(old); + IDP_FreePropertyContent(old); memcpy(old, item, sizeof(IDProperty)); } @@ -175,7 +175,7 @@ void IDP_ResizeIDPArray(IDProperty *prop, int newlen) int i; for (i = newlen; i < prop->len; i++) { - IDP_FreeProperty(GETPROP(prop, i)); + IDP_FreePropertyContent(GETPROP(prop, i)); } prop->len = newlen; @@ -192,7 +192,7 @@ void IDP_ResizeIDPArray(IDProperty *prop, int newlen) /* newlen is smaller */ int i; for (i = newlen; i < prop->len; i++) { - IDP_FreeProperty(GETPROP(prop, i)); + IDP_FreePropertyContent(GETPROP(prop, i)); } } @@ -236,7 +236,6 @@ static void idp_resize_group_array(IDProperty *prop, int newlen, void *newarr) for (a = newlen; a < prop->len; a++) { IDP_FreeProperty(array[a]); - MEM_freeN(array[a]); } } } @@ -513,7 +512,6 @@ void IDP_SyncGroupValues(IDProperty *dest, const IDProperty *src) default: { BLI_insertlinkreplace(&dest->data.group, other, IDP_CopyProperty(prop)); IDP_FreeProperty(other); - MEM_freeN(other); break; } } @@ -535,7 +533,6 @@ void IDP_SyncGroupTypes(IDProperty *dst, const IDProperty *src, const bool do_ar (prop_src->len != prop_dst->len))) { BLI_insertlinkreplace(&dst->data.group, prop_dst, IDP_CopyProperty(prop_src)); IDP_FreeProperty(prop_dst); - MEM_freeN(prop_dst); } else if (prop_dst->type == IDP_GROUP) { IDP_SyncGroupTypes(prop_dst, prop_src, do_arraylen); @@ -562,7 +559,6 @@ void IDP_ReplaceGroupInGroup(IDProperty *dest, const IDProperty *src) if (STREQ(loop->name, prop->name)) { BLI_insertlinkreplace(&dest->data.group, loop, IDP_CopyProperty(prop)); IDP_FreeProperty(loop); - MEM_freeN(loop); break; } } @@ -588,7 +584,6 @@ void IDP_ReplaceInGroup_ex(IDProperty *group, IDProperty *prop, IDProperty *prop if (prop_exist != NULL) { BLI_insertlinkreplace(&group->data.group, prop_exist, prop); IDP_FreeProperty(prop_exist); - MEM_freeN(prop_exist); } else { group->len++; @@ -668,12 +663,6 @@ void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, const bool do_overw * (the function that adds new properties to groups, #IDP_AddToGroup, * returns false if a property can't be added to the group, and true if it can) * and free the property. - * - * Currently the code to free ID properties is designed to leave the actual struct - * you pass it un-freed, this is needed for how the system works. This means - * to free an ID property, you first call #IDP_FreeProperty then #MEM_freeN the struct. - * In the future this will just be #IDP_FreeProperty and the code will - * be reorganized to work properly. */ bool IDP_AddToGroup(IDProperty *group, IDProperty *prop) { @@ -709,8 +698,7 @@ bool IDP_InsertToGroup(IDProperty *group, IDProperty *previous, IDProperty *pnew * \note this does not free the property!! * * To free the property, you have to do: - * IDP_FreeProperty(prop); //free all subdata - * MEM_freeN(prop); //free property struct itself + * IDP_FreeProperty(prop); */ void IDP_RemoveFromGroup(IDProperty *group, IDProperty *prop) { @@ -727,7 +715,6 @@ void IDP_FreeFromGroup(IDProperty *group, IDProperty *prop) { IDP_RemoveFromGroup(group, prop); IDP_FreeProperty(prop); - MEM_freeN(prop); } IDProperty *IDP_GetPropertyFromGroup(IDProperty *prop, const char *name) @@ -1093,14 +1080,20 @@ void IDP_FreeProperty_ex(IDProperty *prop, const bool do_id_user) } } -void IDP_FreeProperty(IDProperty *prop) +void IDP_FreePropertyContent(IDProperty *prop) { IDP_FreeProperty_ex(prop, true); } +void IDP_FreeProperty(IDProperty *prop) +{ + IDP_FreePropertyContent(prop); + MEM_freeN(prop); +} + void IDP_ClearProperty(IDProperty *prop) { - IDP_FreeProperty(prop); + IDP_FreePropertyContent(prop); prop->data.pointer = NULL; prop->len = prop->totallen = 0; } diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index 99e6c99ec0c..60c00160e6d 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -235,7 +235,6 @@ void BKE_view_layer_free_ex(ViewLayer *view_layer, const bool do_id_user) if (view_layer->id_properties) { IDP_FreeProperty(view_layer->id_properties); - MEM_freeN(view_layer->id_properties); } MEM_SAFE_FREE(view_layer->object_bases_array); diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 3adb6cfe960..52828205b2d 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1910,7 +1910,6 @@ static void node_socket_interface_free(bNodeTree *UNUSED(ntree), bNodeSocket *so { if (sock->prop) { IDP_FreeProperty(sock->prop); - MEM_freeN(sock->prop); } if (sock->default_value) { diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 6c2bd5e6127..78f2b10305e 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1951,7 +1951,6 @@ void BKE_object_make_proxy(Main *bmain, Object *ob, Object *target, Object *cob) /* copy IDProperties */ if (ob->id.properties) { IDP_FreeProperty(ob->id.properties); - MEM_freeN(ob->id.properties); ob->id.properties = NULL; } if (target->id.properties) { @@ -4497,4 +4496,4 @@ void BKE_object_update_select_id(struct Main *bmain) ob->runtime.select_id = select_id++; ob = ob->id.next; } -} \ No newline at end of file +} diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index a1e6aa6c4d6..872f99ff813 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -497,7 +497,6 @@ void BKE_scene_free_ex(Scene *sce, const bool do_id_user) } if (sce->r.ffcodecdata.properties) { IDP_FreeProperty(sce->r.ffcodecdata.properties); - MEM_freeN(sce->r.ffcodecdata.properties); sce->r.ffcodecdata.properties = NULL; } diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 5c41048be83..bc9ec6b28e6 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -427,7 +427,6 @@ void BKE_area_region_free(SpaceType *st, ARegion *ar) } if (uilst->properties) { IDP_FreeProperty(uilst->properties); - MEM_freeN(uilst->properties); } } diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c index 669eb5c42dc..387d4ec5773 100644 --- a/source/blender/blenkernel/intern/workspace.c +++ b/source/blender/blenkernel/intern/workspace.c @@ -356,7 +356,6 @@ void BKE_workspace_tool_remove(struct WorkSpace *workspace, struct bToolRef *tre } if (tref->properties) { IDP_FreeProperty(tref->properties); - MEM_freeN(tref->properties); } BLI_remlink(&workspace->tools, tref); MEM_freeN(tref); diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index a74d5b241ed..ae41b8f3272 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -1616,7 +1616,7 @@ static void ffmpeg_set_expert_options(RenderData *rd) int codec_id = rd->ffcodecdata.codec; if (rd->ffcodecdata.properties) { - IDP_FreeProperty(rd->ffcodecdata.properties); + IDP_FreePropertyContent(rd->ffcodecdata.properties); } if (codec_id == AV_CODEC_ID_H264) { @@ -1680,7 +1680,7 @@ void BKE_ffmpeg_preset_set(RenderData *rd, int preset) int isntsc = (rd->frs_sec != 25); if (rd->ffcodecdata.properties) { - IDP_FreeProperty(rd->ffcodecdata.properties); + IDP_FreePropertyContent(rd->ffcodecdata.properties); } switch (preset) { -- cgit v1.2.3