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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs