[Bf-blender-cvs] [db5120603f8] master: Refactor: Simplify ID Property freeing

Jacques Lucke noreply at git.blender.org
Thu May 16 14:12:53 CEST 2019


Commit: db5120603f8f6236d1417199f257e35e0eb8c00b
Author: Jacques Lucke
Date:   Thu May 16 14:11:11 2019 +0200
Branches: master
https://developer.blender.org/rBdb5120603f8f6236d1417199f257e35e0eb8c00b

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

===================================================================

M	source/blender/blenkernel/BKE_idprop.h
M	source/blender/blenkernel/intern/action.c
M	source/blender/blenkernel/intern/addon.c
M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/blender.c
M	source/blender/blenkernel/intern/blender_user_menu.c
M	source/blender/blenkernel/intern/constraint.c
M	source/blender/blenkernel/intern/fmodifier.c
M	source/blender/blenkernel/intern/idprop.c
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenkernel/intern/writeffmpeg.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/versioning_defaults.c
M	source/blender/depsgraph/intern/depsgraph_query_iter.cc
M	source/blender/editors/armature/armature_utils.c
M	source/blender/editors/armature/pose_lib.c
M	source/blender/editors/armature/pose_transform.c
M	source/blender/editors/armature/pose_utils.c
M	source/blender/editors/interface/interface.c
M	source/blender/editors/interface/interface_context_menu.c
M	source/blender/editors/interface/interface_layout.c
M	source/blender/imbuf/intern/metadata.c
M	source/blender/makesrna/intern/rna_access.c
M	source/blender/python/generic/idprop_py_api.c
M	source/blender/python/intern/bpy_rna.c
M	source/blender/windowmanager/gizmo/intern/wm_gizmo.c
M	source/blender/windowmanager/intern/wm.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_keymap.c
M	source/blender/windowmanager/intern/wm_operator_type.c
M	source/blender/windowmanager/intern/wm_operators.c

===================================================================

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/

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list