[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50360] trunk/blender/intern/ghost/intern: Fix #32046: GHOST_DropTargetWin32 memory leak, patch by Matt D.
Brecht Van Lommel
brechtvanlommel at pandora.be
Mon Sep 3 19:41:47 CEST 2012
Revision: 50360
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50360
Author: blendix
Date: 2012-09-03 17:41:47 +0000 (Mon, 03 Sep 2012)
Log Message:
-----------
Fix #32046: GHOST_DropTargetWin32 memory leak, patch by Matt D.
Modified Paths:
--------------
trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp
trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp
Modified: trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp 2012-09-03 16:52:59 UTC (rev 50359)
+++ trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp 2012-09-03 17:41:47 UTC (rev 50360)
@@ -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);
}
Modified: trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp 2012-09-03 16:52:59 UTC (rev 50359)
+++ trunk/blender/intern/ghost/intern/GHOST_WindowWin32.cpp 2012-09-03 17:41:47 UTC (rev 50360)
@@ -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;
}
More information about the Bf-blender-cvs
mailing list