From 864a53e276967359714723d6c3b700ae4dfb7f8c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 2 Oct 2017 01:34:51 +1100 Subject: Fix gradient tool crash with recent changes Having gesture automatic free memory isn't practical if this has it's own allocations. Add option not to free userdata. --- source/blender/windowmanager/WM_types.h | 1 + source/blender/windowmanager/intern/wm_gesture.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'source/blender/windowmanager') diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h index 97f9257b4cb..f6049f10378 100644 --- a/source/blender/windowmanager/WM_types.h +++ b/source/blender/windowmanager/WM_types.h @@ -423,6 +423,7 @@ typedef struct wmGesture { /* free pointer to use for operator allocs (if set, its freed on exit)*/ void *userdata; + bool userdata_free; } wmGesture; /* ************** wmEvent ************************ */ diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index e04571fe572..cc48b162352 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -71,6 +71,7 @@ wmGesture *WM_gesture_new(bContext *C, const wmEvent *event, int type) gesture->type = type; gesture->event_type = event->type; gesture->swinid = ar->swinid; /* means only in area-region context! */ + gesture->userdata_free = true; /* Free if userdata is set. */ wm_subwindow_origin_get(window, gesture->swinid, &sx, &sy); @@ -114,7 +115,7 @@ void WM_gesture_end(bContext *C, wmGesture *gesture) win->tweak = NULL; BLI_remlink(&win->gesture, gesture); MEM_freeN(gesture->customdata); - if (gesture->userdata) { + if (gesture->userdata && gesture->userdata_free) { MEM_freeN(gesture->userdata); } MEM_freeN(gesture); -- cgit v1.2.3