[Bf-blender-cvs] [f1a805ef918] simulation-tree: unify node type freeing
Jacques Lucke
noreply at git.blender.org
Thu Feb 20 13:19:52 CET 2020
Commit: f1a805ef918eab85d1c9ba2d7a33b9c127cfbf14
Author: Jacques Lucke
Date: Thu Feb 20 11:21:46 2020 +0100
Branches: simulation-tree
https://developer.blender.org/rBf1a805ef918eab85d1c9ba2d7a33b9c127cfbf14
unify node type freeing
===================================================================
M source/blender/blenkernel/BKE_node.h
M source/blender/blenkernel/intern/node.c
M source/blender/makesrna/intern/rna_nodetree.c
M source/blender/nodes/intern/node_common.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index ae32093674b..ffc2150516e 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -177,7 +177,6 @@ typedef int (*NodeGPUExecFunction)(struct GPUMaterial *mat,
*/
typedef struct bNodeType {
void *next, *prev;
- short needs_free; /* set for allocated types that need to be freed */
char idname[64]; /* identifier name */
int type;
@@ -259,7 +258,8 @@ typedef struct bNodeType {
/* Custom data that can be used in callbacks. */
void *userdata;
- void (*free_userdata)(void *userdata);
+
+ void (*free_self)(struct bNodeType *ntype);
/* **** execution callbacks **** */
NodeInitExecFunction initexecfunc;
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 4c66da6eed8..9e52f7ea939 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -412,8 +412,9 @@ static void node_free_type(void *nodetype_v)
free_dynamic_typeinfo(nodetype);
}
- if (nodetype->needs_free) {
- MEM_freeN(nodetype);
+ /* Can be NULL when the type is not dynamically allocated. */
+ if (nodetype->free_self) {
+ nodetype->free_self(nodetype);
}
}
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index db2315ea804..86162539a93 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -1682,8 +1682,7 @@ static bNodeType *rna_Node_register_base(Main *bmain,
/* create a new node type */
nt = MEM_callocN(sizeof(bNodeType), "node type");
memcpy(nt, &dummynt, sizeof(dummynt));
- /* make sure the node type struct is freed on unregister */
- nt->needs_free = 1;
+ nt->free_self = (void (*)(bNodeType *))MEM_freeN;
nt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, nt->idname, basetype);
nt->ext.data = data;
diff --git a/source/blender/nodes/intern/node_common.c b/source/blender/nodes/intern/node_common.c
index 6b3e378c94e..ba00190b1da 100644
--- a/source/blender/nodes/intern/node_common.c
+++ b/source/blender/nodes/intern/node_common.c
@@ -208,13 +208,13 @@ void register_node_type_frame(void)
{
/* frame type is used for all tree types, needs dynamic allocation */
bNodeType *ntype = MEM_callocN(sizeof(bNodeType), "frame node type");
+ ntype->free_self = (void (*)(bNodeType *))MEM_freeN;
node_type_base(ntype, NODE_FRAME, "Frame", NODE_CLASS_LAYOUT, NODE_BACKGROUND);
node_type_init(ntype, node_frame_init);
node_type_storage(ntype, "NodeFrame", node_free_standard_storage, node_copy_standard_storage);
node_type_size(ntype, 150, 100, 0);
- ntype->needs_free = 1;
nodeRegisterType(ntype);
}
@@ -253,12 +253,12 @@ void register_node_type_reroute(void)
{
/* frame type is used for all tree types, needs dynamic allocation */
bNodeType *ntype = MEM_callocN(sizeof(bNodeType), "frame node type");
+ ntype->free_self = (void (*)(bNodeType *))MEM_freeN;
node_type_base(ntype, NODE_REROUTE, "Reroute", NODE_CLASS_LAYOUT, 0);
node_type_init(ntype, node_reroute_init);
node_type_internal_links(ntype, node_reroute_update_internal_links);
- ntype->needs_free = 1;
nodeRegisterType(ntype);
}
@@ -491,13 +491,13 @@ void register_node_type_group_input(void)
{
/* used for all tree types, needs dynamic allocation */
bNodeType *ntype = MEM_callocN(sizeof(bNodeType), "node type");
+ ntype->free_self = (void (*)(bNodeType *))MEM_freeN;
node_type_base(ntype, NODE_GROUP_INPUT, "Group Input", NODE_CLASS_INTERFACE, 0);
node_type_size(ntype, 140, 80, 400);
node_type_init(ntype, node_group_input_init);
node_type_update(ntype, node_group_input_update);
- ntype->needs_free = 1;
nodeRegisterType(ntype);
}
@@ -589,12 +589,12 @@ void register_node_type_group_output(void)
{
/* used for all tree types, needs dynamic allocation */
bNodeType *ntype = MEM_callocN(sizeof(bNodeType), "node type");
+ ntype->free_self = (void (*)(bNodeType *))MEM_freeN;
node_type_base(ntype, NODE_GROUP_OUTPUT, "Group Output", NODE_CLASS_INTERFACE, 0);
node_type_size(ntype, 140, 80, 400);
node_type_init(ntype, node_group_output_init);
node_type_update(ntype, node_group_output_update);
- ntype->needs_free = 1;
nodeRegisterType(ntype);
}
More information about the Bf-blender-cvs
mailing list