[Bf-blender-cvs] [37c55527427] master: Fix memory leak with image drag and drop

Campbell Barton noreply at git.blender.org
Wed Jan 13 06:25:07 CET 2021


Commit: 37c55527427201e86f06ec8038fd8feaae00c92e
Author: Campbell Barton
Date:   Wed Jan 13 16:09:53 2021 +1100
Branches: master
https://developer.blender.org/rB37c55527427201e86f06ec8038fd8feaae00c92e

Fix memory leak with image drag and drop

Dragging an image from the file selector into the sequencer
was leaking memory.

Regression in b5d778a7d4072bfb091198a2094890157a6d017b.

===================================================================

M	source/blender/editors/interface/interface_handlers.c
M	source/blender/windowmanager/intern/wm_dragdrop.c

===================================================================

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) {



More information about the Bf-blender-cvs mailing list