┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2010-02-28 15:01:33 +0000
committerPeter Penz <[email protected]>2010-02-28 15:01:33 +0000
commit072dacbb552cd743d99eb811aa4a2ddf4844090a (patch)
tree32282bc44ad169894c1b9886072ab13a6e64f327
parent77d9413d075104a797569d56d2a97016daa6540c (diff)
Fix possible memory leak when invoking KLoadMetaDataThread::cancelAndDelete().
svn path=/trunk/KDE/kdebase/apps/; revision=1097154
-rw-r--r--src/panels/information/kloadmetadatathread.cpp15
-rw-r--r--src/panels/information/kmetadatawidget.cpp2
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