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

List:       kde-devel
Subject:    KControl leak and changes in some kcm modules
From:       Albert Astals Cid <astals11 () terra ! es>
Date:       2004-01-20 22:23:43
Message-ID: 200401202323.43439.astals11 () terra ! es
[Download RAW message or body]

Hi, today i discovered some memory leakage in kcontrol toplevel.cpp, it was 
calling aboutData that returns a pointer to a KAboutData but never deleting 
it. I tried to fix it, but then realized that some kcm modules don't return a 
new KAboutData pointer each time. Some return a class member and some have a 
static variable, but the most return a new KAboutData each time, so i have 
looked at the CVS and chagned the few that didn't return a new KAboutData 
each time to do so. Here come the patches.

Can you please review them and tell me if i can commit them.

["kcontrolPatchkcontrol" (text/x-diff)]

? kcontrolPatchkcontrol
Index: email/email.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/email/email.cpp,v
retrieving revision 1.87
diff -u -r1.87 email.cpp
--- email/email.cpp	8 Nov 2003 23:43:50 -0000	1.87
+++ email/email.cpp	20 Jan 2004 22:04:34 -0000
@@ -84,13 +84,30 @@
 	m_email->btnNewProfile->hide();
 	load();
 
-	mAboutData = new KAboutData("kcmemail", I18N_NOOP("KDE Email Control Module"), \
"1.0", +	if ( m_email->txtFullName->text().isEmpty() &&
+	     m_email->txtOrganization->text().isEmpty() &&
+	     m_email->txtEMailAddr->text().isEmpty() &&
+	     m_email->txtReplyTo->text().isEmpty() &&
+	     m_email->txtSMTP->text().isEmpty() )
+	{
+		KConfigGroup config( EMailFactory::instance()->config(),
+				     "General" );
+		if ( config.readBoolEntry( "FirstStart", true ) )
+			defaults();
+	}
+
+	m_email->txtFullName->setFocus();
+}
+
+const KAboutData * topKCMEmail::aboutData() const
+{
+	KAboutData *aboutData = new KAboutData("kcmemail", I18N_NOOP("KDE Email Control \
Module"), "1.0",  I18N_NOOP("Configure your identity, email addresses, mail servers, \
etc."),  KAboutData::License_Custom);
-	mAboutData->addAuthor("Michael H\303\244ckel", I18N_NOOP("Current maintainer"), \
                "haeckel@kde.org" );
-	mAboutData->addAuthor("Daniel Molkentin");
-	mAboutData->addAuthor("Alex Zepeda");
-	mAboutData->setLicenseText(
+	aboutData->addAuthor("Michael H\303\244ckel", I18N_NOOP("Current maintainer"), \
"haeckel@kde.org" ); +	aboutData->addAuthor("Daniel Molkentin");
+	aboutData->addAuthor("Alex Zepeda");
+	aboutData->setLicenseText(
 	"You can freely distribute this program under the following terms:\n"
 	"\n"
 	"1.) If you use this program in a product outside of KDE, you must\n"
@@ -114,29 +131,7 @@
 	"OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
 	"SUCH DAMAGE.");
 
-	if ( m_email->txtFullName->text().isEmpty() &&
-	     m_email->txtOrganization->text().isEmpty() &&
-	     m_email->txtEMailAddr->text().isEmpty() &&
-	     m_email->txtReplyTo->text().isEmpty() &&
-	     m_email->txtSMTP->text().isEmpty() )
-	{
-		KConfigGroup config( EMailFactory::instance()->config(),
-				     "General" );
-		if ( config.readBoolEntry( "FirstStart", true ) )
-			defaults();
-	}
-
-	m_email->txtFullName->setFocus();
-}
-
-topKCMEmail::~topKCMEmail()
-{
-	delete mAboutData;
-}
-
-const KAboutData * topKCMEmail::aboutData() const
-{
-	return mAboutData;
+	return aboutData;
 }
 
 void topKCMEmail::load()
Index: email/email.h
===================================================================
RCS file: /home/kde/kdebase/kcontrol/email/email.h,v
retrieving revision 1.27
diff -u -r1.27 email.h
--- email/email.h	27 Jul 2002 18:51:31 -0000	1.27
+++ email/email.h	20 Jan 2004 22:04:35 -0000
@@ -60,7 +60,6 @@
 
 public:
 	topKCMEmail (QWidget *parent = 0, const char *name = 0, const QStringList &list \
                =QStringList() );
-	~topKCMEmail ();
 	virtual const KAboutData * aboutData () const;
 
 	KCMEmailBase *m_email;
@@ -85,7 +84,6 @@
 
 protected:
 	void clearData();
-	KAboutData *mAboutData;
 	KEMailSettings *pSettings;
 	QString m_sICMPassword, m_sICMUsername, m_sICMPath, m_sICMHost;
 	QString m_sOGMPassword, m_sOGMUsername, m_sOGMCommand, m_sOGMHost;
Index: icons/main.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/icons/main.cpp,v
retrieving revision 1.20
diff -u -r1.20 main.cpp
--- icons/main.cpp	8 Nov 2003 23:43:51 -0000	1.20
+++ icons/main.cpp	20 Jan 2004 22:04:35 -0000
@@ -94,18 +94,13 @@
 
 const KAboutData *IconModule::aboutData() const
 {
-    static KAboutData* ab = 0;
-
-    if (!ab)
-    {
-        ab = new KAboutData("kcmicons", I18N_NOOP("Icons"), "3.0",
+    KAboutData* ab = new KAboutData("kcmicons", I18N_NOOP("Icons"), "3.0",
                             I18N_NOOP("Icons Control Panel Module"),
                             KAboutData::License_GPL,
                             I18N_NOOP("(c) 2000-2003 Geert Jansen"), 0, 0);
-        ab->addAuthor("Geert Jansen", 0, "jansen@kde.org");
-        ab->addAuthor("Antonio Larrosa Jimenez", 0, "larrosa@kde.org");
-        ab->addCredit("Torsten Rahn", 0, "torsten@kde.org");
-    }
+    ab->addAuthor("Geert Jansen", 0, "jansen@kde.org");
+    ab->addAuthor("Antonio Larrosa Jimenez", 0, "larrosa@kde.org");
+    ab->addCredit("Torsten Rahn", 0, "torsten@kde.org");
 
     return ab;
 }
Index: kcontrol/toplevel.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/kcontrol/toplevel.cpp,v
retrieving revision 1.122
diff -u -r1.122 toplevel.cpp
--- kcontrol/toplevel.cpp	21 Oct 2003 15:25:46 -0000	1.122
+++ kcontrol/toplevel.cpp	20 Jan 2004 22:04:37 -0000
@@ -383,7 +383,9 @@
 
   _active=mod;
 
-  if (mod->aboutData())
+  const KAboutData *ad;
+  ad = mod->aboutData();
+  if (ad)
   {
      about_module->setText(i18n("Help menu->about <modulename>", "About %1").arg(
                              handleAmpersand( mod->moduleName())));
@@ -396,6 +398,7 @@
      about_module->setIconSet(QIconSet());
      about_module->setEnabled(false);
   }
+  delete ad;
 }
 
 void TopLevel::deleteDummyAbout()
@@ -422,8 +425,10 @@
         dummyAbout = const_cast<KAboutData*>(KGlobal::instance()->aboutData());
     else
     {
-        if (_active->aboutData())
-            dummyAbout = const_cast<KAboutData*>(_active->aboutData());
+        const KAboutData *ad;
+        ad = _active->aboutData();
+        if (ad)
+            dummyAbout = const_cast<KAboutData*>(ad);
         else
         {
             snprintf(buffer, sizeof(buffer), "kcm%s", _active->library().latin1());
@@ -441,8 +446,11 @@
 
 void TopLevel::aboutModule()
 {
-    KAboutApplication dlg(_active->aboutData());
+    const KAboutData *ad;
+    ad = _active->aboutData();
+    KAboutApplication dlg(ad);
     dlg.exec();
+    delete ad;
 }
 
 QString TopLevel::handleAmpersand( QString modulename ) const
Index: kfontinst/kcmfontinst/KCmFontInst.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/kfontinst/kcmfontinst/KCmFontInst.cpp,v
retrieving revision 1.17
diff -u -r1.17 KCmFontInst.cpp
--- kfontinst/kcmfontinst/KCmFontInst.cpp	3 Dec 2003 15:26:26 -0000	1.17
+++ kfontinst/kcmfontinst/KCmFontInst.cpp	20 Jan 2004 22:04:41 -0000
@@ -66,7 +66,6 @@
 
 CKCmFontInst::CKCmFontInst(QWidget *parent, const char *, const QStringList&)
             : KCModule(parent, "kfontinst"),
-              itsAboutData(NULL),
               itsTop(CMisc::root() ? "fonts:/" : \
QString("fonts:/")+i18n(KIO_FONTS_USER)),  itsConfig("kcmfontinstuirc")
 {
@@ -338,8 +337,6 @@
     for(it=list.begin(), num=0; it!=list.end() && num<2; ++it, num++)
         itsConfig.writeEntry(0==num ? CFG_DIRSIZE : CFG_PREVIEWSIZE, *it);
 #endif
-    if(itsAboutData)
-        delete itsAboutData;
     delete itsDirOp;
 
     CGlobal::destroy();
@@ -347,20 +344,15 @@
 
 const KAboutData * CKCmFontInst::aboutData() const
 {
-    if(!itsAboutData)
-    {
-        CKCmFontInst *that = const_cast<CKCmFontInst *>(this);
-
-        that->itsAboutData=new KAboutData("kcmfontinst",
-                                          I18N_NOOP("KDE Font Installer"),
-                                          0, 0,
-                                          KAboutData::License_GPL,
-                                          I18N_NOOP("GUI front end to the fonts:/ \
                ioslave.\n"
-                                                    "(c) Craig Drummond, 2000 - \
                2003"));
-        that->itsAboutData->addAuthor("Craig Drummond", I18N_NOOP("Developer and \
                maintainer"), "craig@kde.org");
-    }
+    KAboutData *aboutData=new KAboutData("kcmfontinst",
+                             I18N_NOOP("KDE Font Installer"),
+                             0, 0,
+                             KAboutData::License_GPL,
+                             I18N_NOOP("GUI front end to the fonts:/ ioslave.\n"
+                             "(c) Craig Drummond, 2000 - 2003"));
+    aboutData->addAuthor("Craig Drummond", I18N_NOOP("Developer and maintainer"), \
"craig@kde.org");  
-    return itsAboutData;
+    return aboutData;
 }
 
 QString CKCmFontInst::quickHelp() const
Index: kfontinst/kcmfontinst/KCmFontInst.h
===================================================================
RCS file: /home/kde/kdebase/kcontrol/kfontinst/kcmfontinst/KCmFontInst.h,v
retrieving revision 1.6
diff -u -r1.6 KCmFontInst.h
--- kfontinst/kcmfontinst/KCmFontInst.h	3 Dec 2003 09:47:10 -0000	1.6
+++ kfontinst/kcmfontinst/KCmFontInst.h	20 Jan 2004 22:04:41 -0000
@@ -97,7 +97,6 @@
 
     private:
 
-    KAboutData   *itsAboutData;
     KDirOperator *itsDirOp;
     KURL         itsTop;
     KAction      *itsUpAct,
Index: knotify/knotify.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/knotify/knotify.cpp,v
retrieving revision 1.70
diff -u -r1.70 knotify.cpp
--- knotify/knotify.cpp	8 Nov 2003 23:43:51 -0000	1.70
+++ knotify/knotify.cpp	20 Jan 2004 22:04:44 -0000
@@ -187,18 +187,13 @@
 
 const KAboutData *KCMKNotify::aboutData() const
 {
-    static KAboutData* ab = 0;
-
-    if(!ab)
-    {
-        ab = new KAboutData(
-            "kcmnotify", I18N_NOOP("KNotify"), "3.0",
-            I18N_NOOP("System Notification Control Panel Module"),
-            KAboutData::License_GPL, "(c) 2002 Carsten Pfeiffer", 0, 0 );
-        ab->addAuthor( "Carsten Pfeiffer", 0, "pfeiffer@kde.org" );
-        ab->addCredit( "Charles Samuels", I18N_NOOP("Original implementation"),
-                       "charles@altair.dhs.org" );
-    }
+    KAboutData* ab = new KAboutData(
+        "kcmnotify", I18N_NOOP("KNotify"), "3.0",
+        I18N_NOOP("System Notification Control Panel Module"),
+        KAboutData::License_GPL, "(c) 2002 Carsten Pfeiffer", 0, 0 );
+    ab->addAuthor( "Carsten Pfeiffer", 0, "pfeiffer@kde.org" );
+    ab->addCredit( "Charles Samuels", I18N_NOOP("Original implementation"),
+                   "charles@altair.dhs.org" );
 
     return ab;
 }
Index: locale/toplevel.cpp
===================================================================
RCS file: /home/kde/kdebase/kcontrol/locale/toplevel.cpp,v
retrieving revision 1.56
diff -u -r1.56 toplevel.cpp
--- locale/toplevel.cpp	8 Nov 2003 23:43:52 -0000	1.56
+++ locale/toplevel.cpp	20 Jan 2004 22:04:45 -0000
@@ -46,8 +46,7 @@
 
 KLocaleApplication::KLocaleApplication(QWidget *parent, const char */*name*/, 
                                        const QStringList &args)
-  : KCModule( KLocaleFactory::instance(), parent, args),
-    m_aboutData(0)
+  : KCModule( KLocaleFactory::instance(), parent, args)
 {
   m_nullConfig = new KConfig(QString::null, false, false);
   m_globalConfig = new KConfig(QString::null, false, true);
@@ -141,7 +140,6 @@
   delete m_locale;
   delete m_globalConfig;
   delete m_nullConfig;
-  delete m_aboutData;
 }
 
 void KLocaleApplication::load()
@@ -268,21 +266,15 @@
 
 const KAboutData * KLocaleApplication::aboutData() const
 {
-  if ( ! m_aboutData )
-  {
-    KLocaleApplication * that = const_cast<KLocaleApplication *>(this);
-
-    that->m_aboutData = new KAboutData("kcmlocale",
-                                       I18N_NOOP("KCMLocale"),
-                                       "3.0",
-                                       I18N_NOOP("Regional settings")



>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<


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

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