diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2022-10-27 17:46:51 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2022-10-27 17:47:02 +0300 |
commit | 2625c39ce77ba303e44d9ea90ee8d1bc09c0f336 (patch) | |
tree | d4cf5da61d2a51a4047c6cc4000c69ebe390173d | |
parent | e75be000e3e83b53e0fc18c5719f41de37bd6a75 (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.
-rw-r--r-- | source/blender/editors/gpencil/gpencil_sculpt_paint.c | 21 |
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) { |