From a34f66beb966f3aca202fc23f6da1a6ed4360529 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Thu, 2 Sep 2021 22:43:53 +0300 Subject: [PATCH 1/9] plasma: manage storage jobs lifetime manually in storage job test fixes test crashes, reference: https://github.com/fluxer/kdelibs/commit/40999b8b802d6a28cb89f51d0424ebe3da67ddaa https://github.com/fluxer/kdelibs/blame/master/kdecore/jobs/kjob.h#L252 Signed-off-by: Ivailo Monev --- plasma/tests/storagetest.cpp | 40 ++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/plasma/tests/storagetest.cpp b/plasma/tests/storagetest.cpp index 43ee5581..625303ed 100644 --- a/plasma/tests/storagetest.cpp +++ b/plasma/tests/storagetest.cpp @@ -41,11 +41,11 @@ void StorageTest::store() StorageJob *storageJob = qobject_cast(job); QVERIFY(storageJob); - if (storageJob) { - storageJob->setData(m_data); - QVERIFY(storageJob->exec()); - QVERIFY(storageJob->result().toBool()); - } + storageJob->setAutoDelete(false); + storageJob->setData(m_data); + QVERIFY(storageJob->exec()); + QVERIFY(storageJob->result().toBool()); + storageJob->deleteLater(); } void StorageTest::retrieve() @@ -57,11 +57,11 @@ void StorageTest::retrieve() StorageJob *storageJob = qobject_cast(job); QVERIFY(storageJob); - if (storageJob) { - QVERIFY(storageJob->exec()); - QVERIFY(storageJob->result().type() != QVariant::Bool); - QCOMPARE(storageJob->data(), m_data); - } + storageJob->setAutoDelete(false); + QVERIFY(storageJob->exec()); + QVERIFY(storageJob->result().type() != QVariant::Bool); + QCOMPARE(storageJob->data(), m_data); + storageJob->deleteLater(); } void StorageTest::deleteEntry() @@ -73,11 +73,11 @@ void StorageTest::deleteEntry() StorageJob *storageJob = qobject_cast(job); QVERIFY(storageJob); - if (storageJob) { - storageJob->setData(m_data); - QVERIFY(storageJob->exec()); - QVERIFY(storageJob->result().toBool()); - } + storageJob->setAutoDelete(false); + storageJob->setData(m_data); + QVERIFY(storageJob->exec()); + QVERIFY(storageJob->result().toBool()); + storageJob->deleteLater(); op = storage.operationDescription("retrieve"); op.writeEntry("group", "Test"); @@ -85,11 +85,11 @@ void StorageTest::deleteEntry() storageJob = qobject_cast(job); QVERIFY(storageJob); - if (storageJob) { - QVERIFY(storageJob->exec()); - QVERIFY(storageJob->result().type() != QVariant::Bool); - QVERIFY(storageJob->data().isEmpty()); - } + storageJob->setAutoDelete(false); + QVERIFY(storageJob->exec()); + QVERIFY(storageJob->result().type() != QVariant::Bool); + QVERIFY(storageJob->data().isEmpty()); + storageJob->deleteLater(); } QTEST_KDEMAIN(StorageTest, NoGUI) From 4a37b34e3685c080674687bcee8f1234478eb549 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 02:27:46 +0300 Subject: [PATCH 2/9] kdecore: remove unused and private KConfigPrivate::mappingsRegistered member Signed-off-by: Ivailo Monev --- kdecore/config/kconfig.cpp | 2 -- kdecore/config/kconfig_p.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/kdecore/config/kconfig.cpp b/kdecore/config/kconfig.cpp index fbffb565..bdfef220 100644 --- a/kdecore/config/kconfig.cpp +++ b/kdecore/config/kconfig.cpp @@ -50,8 +50,6 @@ #include #include -bool KConfigPrivate::mappingsRegistered=false; - KConfigPrivate::KConfigPrivate(const KComponentData &componentData_, KConfig::OpenFlags flags, const char* resource) : openFlags(flags), resourceType(resource), mBackend(0), diff --git a/kdecore/config/kconfig_p.h b/kdecore/config/kconfig_p.h index 677390e3..436cf641 100644 --- a/kdecore/config/kconfig_p.h +++ b/kdecore/config/kconfig_p.h @@ -84,8 +84,6 @@ private: bool bSuppressGlobal:1; QString sGlobalFileName; - static bool mappingsRegistered; - KEntryMap entryMap; QString backendType; From 3a57b8a20c22d0ff871122a52b4830f06ad5a963 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 03:05:16 +0300 Subject: [PATCH 3/9] kutils: mark KExiv2 de-initialization function as static Signed-off-by: Ivailo Monev --- kutils/kexiv2/kexiv2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kutils/kexiv2/kexiv2.cpp b/kutils/kexiv2/kexiv2.cpp index 53c90b37..cb266a1b 100644 --- a/kutils/kexiv2/kexiv2.cpp +++ b/kutils/kexiv2/kexiv2.cpp @@ -55,7 +55,7 @@ static int KExiv2Init() } Q_CONSTRUCTOR_FUNCTION(KExiv2Init); -int KExiv2Deinit() +static int KExiv2Deinit() { Exiv2::XmpParser::terminate(); return 0; From 8faaed021fba6bf4110229a9e134db60dd4dc5b4 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 03:07:11 +0300 Subject: [PATCH 4/9] kdecore: plug KTraderParse memory leak Signed-off-by: Ivailo Monev --- kdecore/services/ktraderparse.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/kdecore/services/ktraderparse.cpp b/kdecore/services/ktraderparse.cpp index 5aa6bc6f..306e091a 100644 --- a/kdecore/services/ktraderparse.cpp +++ b/kdecore/services/ktraderparse.cpp @@ -45,15 +45,23 @@ struct ParsingData using namespace KTraderParse; -thread_local ParsingData* s_parsingData = 0; +thread_local ParsingData* s_parsingData = nullptr; + +static int KTraderParseDeinit() { + delete s_parsingData; + return 0; +} +Q_DESTRUCTOR_FUNCTION(KTraderParseDeinit); ParseTreeBase::Ptr KTraderParse::parseConstraints( const QString& _constr ) { + if (s_parsingData) { + delete s_parsingData; + } s_parsingData = new ParsingData(); s_parsingData->buffer = _constr.toUtf8(); KTraderParse_mainParse(s_parsingData->buffer.constData()); ParseTreeBase::Ptr ret = s_parsingData->ptr; - s_parsingData = 0; return ret; } From 5851c07366ab56db69bee054f1821c0cb36f8431 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 20:14:12 +0300 Subject: [PATCH 5/9] kdecore: plug memory leak in KFilterTest Signed-off-by: Ivailo Monev --- kdecore/tests/kfiltertest.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/kdecore/tests/kfiltertest.cpp b/kdecore/tests/kfiltertest.cpp index fbe9b73f..4cd438e6 100644 --- a/kdecore/tests/kfiltertest.cpp +++ b/kdecore/tests/kfiltertest.cpp @@ -385,6 +385,7 @@ void KFilterTest::test_pushData() // ### UNFINISHED QCOMPARE(inBuffer.data().size(), compressed.size()); read += flt->readAll(); qDebug() << QString::fromLatin1(read); + delete flt; // ### indeed, doesn't work currently. So we use HTTPFilter instead, for now. } From 70e051e57ef0b3f3bb1252626f2d62221c72f080 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 20:32:38 +0300 Subject: [PATCH 6/9] kdecore: plug memory leak in KLocaleTest Signed-off-by: Ivailo Monev --- kdecore/tests/klocaletest.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/kdecore/tests/klocaletest.cpp b/kdecore/tests/klocaletest.cpp index eaa195cb..a8b574ff 100644 --- a/kdecore/tests/klocaletest.cpp +++ b/kdecore/tests/klocaletest.cpp @@ -1051,6 +1051,7 @@ void KLocaleTest::testDayPeriods() QCOMPARE( locale.d->dayPeriodForTime( QTime( 1, 0, 0 ) ).periodName( KLocale::ShortName ), QString( "T1" ) ); QCOMPARE( locale.d->dayPeriodForTime( QTime( 11, 0, 0 ) ).periodName( KLocale::ShortName ), QString( "T2" ) ); QCOMPARE( locale.d->dayPeriodForTime( QTime( 21, 0, 0 ) ).periodName( KLocale::ShortName ), QString( "T3" ) ); + delete testConfig; } void KLocaleTest::testCalendarSystemType() From efbbf59a320ed3a2499a1a761471c4017eab7eea Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 21:02:42 +0300 Subject: [PATCH 7/9] kdecore: plug KTraderParse memory leak Signed-off-by: Ivailo Monev --- kdecore/services/ktraderparse.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/kdecore/services/ktraderparse.cpp b/kdecore/services/ktraderparse.cpp index 306e091a..8509de17 100644 --- a/kdecore/services/ktraderparse.cpp +++ b/kdecore/services/ktraderparse.cpp @@ -56,6 +56,7 @@ Q_DESTRUCTOR_FUNCTION(KTraderParseDeinit); ParseTreeBase::Ptr KTraderParse::parseConstraints( const QString& _constr ) { if (s_parsingData) { + s_parsingData->ptr.clear(); delete s_parsingData; } s_parsingData = new ParsingData(); From 3a8be804a5c911cd5ac78e22001d333618ffdcb9 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 21:11:09 +0300 Subject: [PATCH 8/9] kdecore: plug KUrlMimeTest memory leak Signed-off-by: Ivailo Monev --- kdecore/tests/kurlmimetest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kdecore/tests/kurlmimetest.cpp b/kdecore/tests/kurlmimetest.cpp index 53cf8325..579078f4 100644 --- a/kdecore/tests/kurlmimetest.cpp +++ b/kdecore/tests/kurlmimetest.cpp @@ -134,5 +134,5 @@ void KUrlMimeTest::testMostLocalUrlList() QCOMPARE(qurls.count(), localUrls.count()); for (int i = 0; i < qurls.count(); ++i ) QCOMPARE(qurls[i], static_cast(localUrls[i])); - + delete mimeData; } From 94298bc02f4598c17fd08d7ed1e38c4abd3799ac Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Fri, 3 Sep 2021 21:18:08 +0300 Subject: [PATCH 9/9] kdecore: plug Test_KLockFile memory leak Signed-off-by: Ivailo Monev --- kdecore/tests/klockfiletest.cpp | 18 +++++++++++++----- kdecore/tests/klockfiletest.h | 15 ++++++++------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/kdecore/tests/klockfiletest.cpp b/kdecore/tests/klockfiletest.cpp index 0fac515a..4518efcd 100644 --- a/kdecore/tests/klockfiletest.cpp +++ b/kdecore/tests/klockfiletest.cpp @@ -70,6 +70,13 @@ Test_KLockFile::initTestCase() lockFile = new KLockFile(QLatin1String(lockName)); } +void +Test_KLockFile::cleanupTestCase() +{ + delete lockFile; + lockFile = nullptr; +} + static KLockFile::LockResult testLockFromProcess(const QString& lockName) { const int ret = QProcess::execute(KDEBINDIR "/kdecore-klockfile_testlock", QStringList() << lockName); @@ -136,14 +143,15 @@ Test_KLockFile::testStaleNoBlockFlag() stream.flush(); f.close(); - lockFile = new KLockFile(QLatin1String(lockName)); - QVERIFY(!lockFile->isLocked()); - QCOMPARE(lockFile->lock(KLockFile::NoBlockFlag), KLockFile::LockStale); + KLockFile* lockFile2 = new KLockFile(QLatin1String(lockName)); + QVERIFY(!lockFile2->isLocked()); + QCOMPARE(lockFile2->lock(KLockFile::NoBlockFlag), KLockFile::LockStale); QByteArray expectedMsg = QByteArray("WARNING: deleting stale lockfile ") + lockName; QTest::ignoreMessage(QtWarningMsg, expectedMsg); - QCOMPARE(lockFile->lock(KLockFile::NoBlockFlag|KLockFile::ForceFlag), KLockFile::LockOK); + QCOMPARE(lockFile2->lock(KLockFile::NoBlockFlag|KLockFile::ForceFlag), KLockFile::LockOK); - QVERIFY(lockFile->isLocked()); + QVERIFY(lockFile2->isLocked()); + delete lockFile2; } diff --git a/kdecore/tests/klockfiletest.h b/kdecore/tests/klockfiletest.h index 9ec2e865..82d6fe0b 100644 --- a/kdecore/tests/klockfiletest.h +++ b/kdecore/tests/klockfiletest.h @@ -24,15 +24,16 @@ class Test_KLockFile : public QObject { - Q_OBJECT + Q_OBJECT - KLockFile *lockFile; + KLockFile *lockFile; private Q_SLOTS: - void initTestCase(); - void testLock(); - void testStale(); - void testUnlock(); - void testStaleNoBlockFlag(); + void initTestCase(); + void cleanupTestCase(); + void testLock(); + void testStale(); + void testUnlock(); + void testStaleNoBlockFlag(); }; #endif