[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