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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-02-20 13:28:59 +0300
committerCampbell Barton <campbell@blender.org>2022-02-21 04:01:32 +0300
commit7b11c717294341f5c288e2dc8432e84bc53663ff (patch)
tree9491ea278c18761762733ffc97c82477959af771 /source
parent2554ef986a8ccd1dc245478f99524dc68f8af435 (diff)
RNA: modify debug mode logic for setting invalid unset values
The previous behavior called RNA_enum_item_add a second time, filled it's contents with invalid values then subtracted totitem, this caused an unusual reallocation pattern where MEM_recallocN would run in order to create the dummy item, then again when adding another itme (reallocating an array of the same size). Simply memset the array to 0xff instead.
Diffstat (limited to 'source')
-rw-r--r--source/blender/makesrna/intern/rna_define.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index 850accd0b24..5127b418b7f 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -4391,24 +4391,21 @@ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropert
if (tot == 0) {
*items = MEM_callocN(sizeof(EnumPropertyItem[8]), __func__);
+ /* Ensure we get crashes on missing calls to 'RNA_enum_item_end', see T74227. */
+#ifdef DEBUG
+ memset(*items, 0xff, sizeof(EnumPropertyItem[8]));
+#endif
}
else if (tot >= 8 && (tot & (tot - 1)) == 0) {
/* power of two > 8 */
*items = MEM_recallocN_id(*items, sizeof(EnumPropertyItem) * tot * 2, __func__);
+#ifdef DEBUG
+ memset((*items) + tot, 0xff, sizeof(EnumPropertyItem) * tot);
+#endif
}
(*items)[tot] = *item;
*totitem = tot + 1;
-
- /* Ensure we get crashes on missing calls to 'RNA_enum_item_end', see T74227. */
-#ifdef DEBUG
- static const EnumPropertyItem item_error = {
- -1, POINTER_FROM_INT(-1), -1, POINTER_FROM_INT(-1), POINTER_FROM_INT(-1)};
- if (item != &item_error) {
- RNA_enum_item_add(items, totitem, &item_error);
- *totitem -= 1;
- }
-#endif
}
void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem)