diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-08-11 12:09:03 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-08-11 12:10:19 +0300 |
commit | bc88ee329256d903308e67071c2edc2c8f32376d (patch) | |
tree | 2905a9a0687b6400ccfdc8a721f9d5fc3be9ef37 /source/blender/makesrna/intern/rna_define.c | |
parent | d5d626df236b17c2d4ac731b2aaace52a2611304 (diff) |
Error in last commit, problems with unregister
We can't free the identifier before its used when
removing from the ghash.
Diffstat (limited to 'source/blender/makesrna/intern/rna_define.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_define.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 5a1aec59362..0f8bc19bd6c 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -145,8 +145,25 @@ static void rna_brna_structs_add(BlenderRNA *brna, StructRNA *srna) if (srna->identifier[0] != '\0') { BLI_ghash_insert(brna->structs_map, (void *)srna->identifier, srna); } +} + +#ifdef RNA_RUNTIME +static void rna_brna_structs_remove_and_free(BlenderRNA *brna, StructRNA *srna) +{ + if (brna->structs_map) { + if (srna->identifier[0] != '\0') { + BLI_ghash_remove(brna->structs_map, (void *)srna->identifier, NULL, NULL); + } + } + + RNA_def_struct_free_pointers(srna); + if (srna->flag & STRUCT_RUNTIME) { + rna_freelinkN(&brna->structs, srna); + } + brna->structs_len -= 1; } +#endif StructDefRNA *rna_find_struct_def(StructRNA *srna) { @@ -655,10 +672,8 @@ void RNA_struct_free(BlenderRNA *brna, StructRNA *srna) rna_freelinkN(&srna->functions, func); } - RNA_def_struct_free_pointers(srna); - if (srna->flag & STRUCT_RUNTIME) - rna_freelinkN(&brna->structs, srna); + rna_brna_structs_remove_and_free(brna, srna); #else UNUSED_VARS(brna, srna); #endif |