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
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2021-01-13 08:09:53 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-01-13 08:23:14 +0300
commit37c55527427201e86f06ec8038fd8feaae00c92e (patch)
tree6f7b633c431b324f52e3d165596f54de85b0746c /source/blender
parent5d9919988009b158cd918b402d29fc516ad47e35 (diff)
Fix memory leak with image drag and drop
Dragging an image from the file selector into the sequencer was leaking memory. Regression in b5d778a7d4072bfb091198a2094890157a6d017b.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/interface/interface_handlers.c7
-rw-r--r--source/blender/windowmanager/intern/wm_dragdrop.c4
2 files changed, 10 insertions, 1 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 29a42dd4021..c098b5c79a1 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -1993,7 +1993,12 @@ static bool ui_but_drag_init(bContext *C,
}
else {
wmDrag *drag = WM_event_start_drag(
- C, but->icon, but->dragtype, but->dragpoin, ui_but_value_get(but), WM_DRAG_NOP);
+ C,
+ but->icon,
+ but->dragtype,
+ but->dragpoin,
+ ui_but_value_get(but),
+ (but->dragflag & UI_BUT_DRAGPOIN_FREE) ? WM_DRAG_FREE_DATA : WM_DRAG_NOP);
/* wmDrag has ownership over dragpoin now, stop messing with it. */
but->dragpoin = NULL;
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c
index fe2e2d92127..08f60fef0d2 100644
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@ -150,6 +150,10 @@ wmDrag *WM_event_start_drag(
switch (type) {
case WM_DRAG_PATH:
BLI_strncpy(drag->path, poin, FILE_MAX);
+ /* As the path is being copied, free it immediately as `drag` wont "own" the data. */
+ if (flags & WM_DRAG_FREE_DATA) {
+ MEM_freeN(poin);
+ }
break;
case WM_DRAG_ID:
if (poin) {