[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