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:
authorAntonio Vazquez <blendergit@gmail.com>2022-10-27 17:46:51 +0300
committerAntonio Vazquez <blendergit@gmail.com>2022-10-27 17:47:02 +0300
commit2625c39ce77ba303e44d9ea90ee8d1bc09c0f336 (patch)
treed4cf5da61d2a51a4047c6cc4000c69ebe390173d /source
parente75be000e3e83b53e0fc18c5719f41de37bd6a75 (diff)
Fix T102092: GPencil Sculpt Grab crash using Shift key
There was a problem with the hash table that was not created as expected. Also fixed an unreported memory leak in Grab tool not related to this crash but detected during debug.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/gpencil/gpencil_sculpt_paint.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/editors/gpencil/gpencil_sculpt_paint.c b/source/blender/editors/gpencil/gpencil_sculpt_paint.c
index 9b934876ebb..3b7336f41e8 100644
--- a/source/blender/editors/gpencil/gpencil_sculpt_paint.c
+++ b/source/blender/editors/gpencil/gpencil_sculpt_paint.c
@@ -1202,6 +1202,9 @@ static bool gpencil_sculpt_brush_init(bContext *C, wmOperator *op)
gso->automasking_strokes = BLI_ghash_ptr_new(__func__);
}
else {
+ if (gso->automasking_strokes != NULL) {
+ BLI_ghash_free(gso->automasking_strokes, NULL, NULL);
+ }
gso->automasking_strokes = NULL;
}
/* save mask */
@@ -1292,6 +1295,10 @@ static void gpencil_sculpt_brush_exit(bContext *C, wmOperator *op)
}
default:
+ if (gso->stroke_customdata != NULL) {
+ BLI_ghash_free(gso->stroke_customdata, NULL, NULL);
+ gso->stroke_customdata = NULL;
+ }
break;
}
@@ -2075,6 +2082,20 @@ static void gpencil_sculpt_brush_apply_event(bContext *C, wmOperator *op, const
if (gso->brush == NULL) {
gso->brush = gso->brush_prev;
}
+ Brush *brush = gso->brush;
+ if (brush->gpencil_settings->sculpt_mode_flag &
+ (GP_SCULPT_FLAGMODE_AUTOMASK_STROKE | GP_SCULPT_FLAGMODE_AUTOMASK_LAYER |
+ GP_SCULPT_FLAGMODE_AUTOMASK_MATERIAL)) {
+ if (gso->automasking_strokes == NULL) {
+ gso->automasking_strokes = BLI_ghash_ptr_new(__func__);
+ }
+ }
+ else {
+ if (gso->automasking_strokes != NULL) {
+ BLI_ghash_free(gso->automasking_strokes, NULL, NULL);
+ }
+ gso->automasking_strokes = NULL;
+ }
}
else {
if (gso->brush_prev != NULL) {