From: Peter Penz Date: Sun, 28 Feb 2010 15:01:33 +0000 (+0000) Subject: Fix possible memory leak when invoking KLoadMetaDataThread::cancelAndDelete(). X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/072dacbb552cd743d99eb811aa4a2ddf4844090a Fix possible memory leak when invoking KLoadMetaDataThread::cancelAndDelete(). svn path=/trunk/KDE/kdebase/apps/; revision=1097154 --- diff --git a/src/panels/information/kloadmetadatathread.cpp b/src/panels/information/kloadmetadatathread.cpp index 5886775b6..e95aca404 100644 --- a/src/panels/information/kloadmetadatathread.cpp +++ b/src/panels/information/kloadmetadatathread.cpp @@ -55,11 +55,16 @@ void KLoadMetaDataThread::load(const KUrl::List& urls) void KLoadMetaDataThread::cancelAndDelete() { - connect(this, SIGNAL(finished()), this, SLOT(slotFinished())); - m_canceled = true; - // Setting m_canceled to true will cancel KLoadMetaDataThread::run() - // as soon as possible. Afterwards the thread will delete itself - // asynchronously inside slotFinished(). + if (isFinished()) { + Q_ASSERT(!isRunning()); + deleteLater(); + } else { + connect(this, SIGNAL(finished()), this, SLOT(slotFinished())); + m_canceled = true; + // Setting m_canceled to true will cancel KLoadMetaDataThread::run() + // as soon as possible. Afterwards the thread will delete itself + // asynchronously inside slotFinished(). + } } void KLoadMetaDataThread::run() diff --git a/src/panels/information/kmetadatawidget.cpp b/src/panels/information/kmetadatawidget.cpp index 14a784af4..ebcaca211 100644 --- a/src/panels/information/kmetadatawidget.cpp +++ b/src/panels/information/kmetadatawidget.cpp @@ -436,6 +436,8 @@ void KMetaDataWidget::Private::slotLoadingFinished() m_files = m_loadMetaDataThread->files(); + Q_ASSERT(!m_loadMetaDataThread->isRunning()); + Q_ASSERT(m_loadMetaDataThread->isFinished()); m_loadMetaDataThread->deleteLater(); m_loadMetaDataThread = 0; #endif