[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22217] branches/blender2.5/blender: fix for ghost memory leaks

Campbell Barton ideasman42 at gmail.com
Wed Aug 5 04:40:53 CEST 2009


Revision: 22217
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22217
Author:   campbellbarton
Date:     2009-08-05 04:40:51 +0200 (Wed, 05 Aug 2009)

Log Message:
-----------
fix for ghost memory leaks
- ghost data wasn't being freed (added wm_ghost_exit() call to wm_init_exit.c)
- GHOST_EventManager wasn't freeing GHOST_IEventConsumer's
- ghost/X11 wasnt calling XCloseDisplay(), some junk from X11 wasnt being freed
- ghost/X11 XAllocNamedColor wasn't freeing the colors when done making a custom cursor.

Modified Paths:
--------------
    branches/blender2.5/blender/intern/ghost/intern/GHOST_EventManager.cpp
    branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp
    branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.h
    branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowManager.cpp
    branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowX11.cpp
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
    branches/blender2.5/blender/source/blender/windowmanager/wm_window.h

Modified: branches/blender2.5/blender/intern/ghost/intern/GHOST_EventManager.cpp
===================================================================
--- branches/blender2.5/blender/intern/ghost/intern/GHOST_EventManager.cpp	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/intern/ghost/intern/GHOST_EventManager.cpp	2009-08-05 02:40:51 UTC (rev 22217)
@@ -51,6 +51,15 @@
 GHOST_EventManager::~GHOST_EventManager()
 {
 	disposeEvents();
+
+	TConsumerVector::iterator iter= m_consumers.begin();
+	while (iter != m_consumers.end())
+	{
+		GHOST_IEventConsumer* consumer = *iter;
+		delete consumer;
+		m_consumers.erase(iter);
+		iter = m_consumers.begin();
+	}
 }
 
 

Modified: branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp
===================================================================
--- branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp	2009-08-05 02:40:51 UTC (rev 22217)
@@ -148,6 +148,13 @@
 	
 }
 
+GHOST_SystemX11::
+~GHOST_SystemX11()
+{
+	XCloseDisplay(m_display);
+}
+
+
 	GHOST_TSuccess 
 GHOST_SystemX11::
 init(

Modified: branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.h
===================================================================
--- branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.h	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.h	2009-08-05 02:40:51 UTC (rev 22217)
@@ -59,6 +59,12 @@
 	GHOST_SystemX11(
 	);
 	
+	/**
+	 * Destructor.
+	 */
+	virtual ~GHOST_SystemX11();
+
+
 		GHOST_TSuccess 
 	init(
 	);

Modified: branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowManager.cpp
===================================================================
--- branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowManager.cpp	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowManager.cpp	2009-08-05 02:40:51 UTC (rev 22217)
@@ -54,6 +54,7 @@
 
 GHOST_WindowManager::~GHOST_WindowManager()
 {
+	/* m_windows is freed by GHOST_System::disposeWindow */
 }
 
 

Modified: branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowX11.cpp
===================================================================
--- branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowX11.cpp	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/intern/ghost/intern/GHOST_WindowX11.cpp	2009-08-05 02:40:51 UTC (rev 22217)
@@ -1325,13 +1325,12 @@
 	int fg_color, 
 	int bg_color
 ){
+	Colormap colormap= DefaultColormap(m_display, DefaultScreen(m_display));
 	Pixmap bitmap_pix, mask_pix;
 	XColor fg, bg;
 	
-	if(XAllocNamedColor(m_display, DefaultColormap(m_display, DefaultScreen(m_display)),
-		"White", &fg, &fg) == 0) return GHOST_kFailure;
-	if(XAllocNamedColor(m_display, DefaultColormap(m_display, DefaultScreen(m_display)),
-		"Black", &bg, &bg) == 0) return GHOST_kFailure;
+	if(XAllocNamedColor(m_display, colormap, "White", &fg, &fg) == 0) return GHOST_kFailure;
+	if(XAllocNamedColor(m_display, colormap, "Black", &bg, &bg) == 0) return GHOST_kFailure;
 
 	if (m_custom_cursor) {
 		XFreeCursor(m_display, m_custom_cursor);
@@ -1347,6 +1346,9 @@
 	XFreePixmap(m_display, bitmap_pix);
 	XFreePixmap(m_display, mask_pix);
 
+    XFreeColors(m_display, colormap, &fg.pixel, 1, 0L);
+    XFreeColors(m_display, colormap, &bg.pixel, 1, 0L);
+
 	return GHOST_kSuccess;
 }
 

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_init_exit.c	2009-08-05 02:40:51 UTC (rev 22217)
@@ -274,6 +274,8 @@
 
 	RNA_exit();
 	
+	wm_ghost_exit();
+
 	CTX_free(C);
 	
 	if(MEM_get_memory_blocks_in_use()!=0) {

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_window.c	2009-08-05 02:40:51 UTC (rev 22217)
@@ -756,6 +756,14 @@
 	}	
 }
 
+void wm_ghost_exit(void)
+{
+	if(g_system)
+		GHOST_DisposeSystem(g_system);
+
+	g_system= NULL;
+}
+
 /* **************** timer ********************** */
 
 /* to (de)activate running timers temporary */

Modified: branches/blender2.5/blender/source/blender/windowmanager/wm_window.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/wm_window.h	2009-08-05 02:34:54 UTC (rev 22216)
+++ branches/blender2.5/blender/source/blender/windowmanager/wm_window.h	2009-08-05 02:40:51 UTC (rev 22217)
@@ -33,6 +33,7 @@
 
 /* *************** internal api ************** */
 void		wm_ghost_init			(bContext *C);
+void		wm_ghost_exit(void);
 
 wmWindow	*wm_window_new			(bContext *C);
 void		wm_window_free			(bContext *C, wmWindow *win);





More information about the Bf-blender-cvs mailing list