diff options
| author | Peter Penz <[email protected]> | 2010-02-28 15:01:33 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2010-02-28 15:01:33 +0000 |
| commit | 072dacbb552cd743d99eb811aa4a2ddf4844090a (patch) | |
| tree | 32282bc44ad169894c1b9886072ab13a6e64f327 | |
| parent | 77d9413d075104a797569d56d2a97016daa6540c (diff) | |
Fix possible memory leak when invoking KLoadMetaDataThread::cancelAndDelete().
svn path=/trunk/KDE/kdebase/apps/; revision=1097154
| -rw-r--r-- | src/panels/information/kloadmetadatathread.cpp | 15 | ||||
| -rw-r--r-- | src/panels/information/kmetadatawidget.cpp | 2 |
2 files changed, 12 insertions, 5 deletions
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 |
