Page MenuHome

GHOST_DropTargetWin32MemLeak.patch

Authored By
Matt D. (foom)
Nov 13 2013, 4:03 PM
Size
1 KB
Subscribers
None

GHOST_DropTargetWin32MemLeak.patch

Index: intern/ghost/intern/GHOST_DropTargetWin32.cpp
===================================================================
--- intern/ghost/intern/GHOST_DropTargetWin32.cpp (revision 48911)
+++ intern/ghost/intern/GHOST_DropTargetWin32.cpp (working copy)
@@ -51,14 +51,10 @@
m_cRef = 1;
m_hWnd = window->getHWND();
m_draggedObjectType = GHOST_kDragnDropTypeUnknown;
-
- // register our window as drop target
- ::RegisterDragDrop(m_hWnd, this);
}
GHOST_DropTargetWin32::~GHOST_DropTargetWin32()
{
- ::RevokeDragDrop(m_hWnd);
}
Index: intern/ghost/intern/GHOST_WindowWin32.cpp
===================================================================
--- intern/ghost/intern/GHOST_WindowWin32.cpp (revision 48911)
+++ intern/ghost/intern/GHOST_WindowWin32.cpp (working copy)
@@ -271,6 +271,10 @@
// Register this window as a droptarget. Requires m_hWnd to be valid.
// Note that OleInitialize(0) has to be called prior to this. Done in GHOST_SystemWin32.
m_dropTarget = new GHOST_DropTargetWin32(this, m_system);
+ if (m_dropTarget) {
+ ::RegisterDragDrop(m_hWnd, m_dropTarget);
+ }
+
// Store a pointer to this class in the window structure
::SetWindowLongPtr(m_hWnd, GWL_USERDATA, (LONG_PTR) this);
@@ -415,7 +419,13 @@
m_hDC = 0;
}
if (m_hWnd) {
- m_dropTarget->Release(); // frees itself.
+ if (m_dropTarget) {
+ // Disable DragDrop
+ RevokeDragDrop(m_hWnd);
+ // Release our reference of the DropTarget and it will delete itself eventually.
+ m_dropTarget->Release();
+ }
+
::DestroyWindow(m_hWnd);
m_hWnd = 0;
}

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
7c/0b/030841dfb9b8341886eb4ab994ce

Event Timeline