[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    [PATCH] Memory leaks in kcontrol/background
From:       Kurt Granroth <granroth () kde ! org>
Date:       2001-06-27 19:52:31
[Download RAW message or body]

This patch fixes a memory leak in the background control panel.

There are two parts to it.  The first replaces a QArray with a QVector.  
According to the QArray docs, only simple types should be stored in it.. 
i.e., objects with no virtual functions or destructors.  Well, these objects 
*do* have destructors and they were never called.  Using a QVector ensured 
that they were.

The second calls the 'cleanup()' method in the destructor.  This is needed to 
delete all the objects put on the heap.. not just one of them.
-- 
Kurt Granroth            | http://www.granroth.org
KDE Developer/Evangelist | SuSE Labs Open Source Developer
granroth@kde.org         | granroth@suse.com
            KDE -- Conquer Your Desktop

["background.diff" (text/x-diff)]

Index: backgnd.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/background/backgnd.cpp,v
retrieving revision 1.28
diff -b -u -r1.28 backgnd.cpp
--- backgnd.cpp	2001/06/18 05:20:43	1.28
+++ backgnd.cpp	2001/06/27 19:43:15
@@ -110,6 +110,7 @@
     m_Max( KWin::numberOfDesktops() ),
     m_Renderer( m_Max )
 {
+    m_Renderer.setAutoDelete(true);
     KImageIO::registerFormats();
 
     int screen_number = 0;
@@ -358,7 +359,7 @@
     m_Desk = KWin::currentDesktop() - 1;
     m_pGlobals = new KGlobalBackgroundSettings();
     for (int i=0; i<m_Max; i++) {
-	m_Renderer[i] = new KBackgroundRenderer(i);
+	m_Renderer.insert(i, new KBackgroundRenderer(i));
 	connect(m_Renderer[i], SIGNAL(imageDone(int)), SLOT(slotPreviewDone(int)));
     }
 
Index: backgnd.h
===================================================================
RCS file: /home/kde/kdebase/kcontrol/background/backgnd.h,v
retrieving revision 1.4
diff -b -u -r1.4 backgnd.h
--- backgnd.h	2001/01/11 03:24:24	1.4
+++ backgnd.h	2001/06/27 19:43:15
@@ -18,6 +18,7 @@
 #include <qmap.h>
 #include <qevent.h>
 #include <qwidget.h>
+#include <qvector.h>
 
 #include <kcmodule.h>
 #include <bgdefaults.h>
@@ -119,7 +120,7 @@
     QSpinBox *m_pCacheBox;
     QMap<QString,int> m_Wallpaper;
 
-    QArray<KBackgroundRenderer*> m_Renderer;
+    QVector<KBackgroundRenderer> m_Renderer;
     KGlobalBackgroundSettings *m_pGlobals;
     KColorButton *m_pColor1But, *m_pColor2But;
     KBGMonitor *m_pMonitor;
Index: bgrender.cc
===================================================================
RCS file: /home/kde/kdebase/kcontrol/background/bgrender.cc,v
retrieving revision 1.11
diff -b -u -r1.11 bgrender.cc
--- bgrender.cc	2001/03/26 11:44:57	1.11
+++ bgrender.cc	2001/06/27 19:43:15
@@ -77,7 +77,7 @@
 
 KBackgroundRenderer::~KBackgroundRenderer()
 {
-    delete m_pImage;
+    cleanup();
     delete m_Tempfile;
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic