From 3e6bcdde69a561b8937bb963038c1a22b966d285 Mon Sep 17 00:00:00 2001 From: Sebastian Trueg Date: Tue, 28 Apr 2009 10:10:20 +0000 Subject: [PATCH] Gracefully end the metadata loading thread. This should fix BUG: 190165 svn path=/trunk/KDE/kdebase/apps/; revision=960318 --- src/panels/information/metadatawidget.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/panels/information/metadatawidget.cpp b/src/panels/information/metadatawidget.cpp index a634f249c..c7f374093 100644 --- a/src/panels/information/metadatawidget.cpp +++ b/src/panels/information/metadatawidget.cpp @@ -87,6 +87,7 @@ public: { public: LoadFilesThread(SharedData* sharedData, QMutex* mutex); + ~LoadFilesThread(); void setFiles(const KUrl::List& urls); virtual void run(); @@ -94,6 +95,7 @@ public: SharedData* m_sharedData; QMutex* m_mutex; KUrl::List m_urls; + bool m_canceled; }; LoadFilesThread* loadFilesThread; @@ -115,6 +117,14 @@ MetaDataWidget::Private::LoadFilesThread::LoadFilesThread( { } +MetaDataWidget::Private::LoadFilesThread::~LoadFilesThread() +{ + // this thread may very well be deleted during execution. We need + // to protect it from crashes here + m_canceled = true; + wait(); +} + void MetaDataWidget::Private::LoadFilesThread::setFiles(const KUrl::List& urls) { QMutexLocker locker( m_mutex ); @@ -133,6 +143,8 @@ void MetaDataWidget::Private::LoadFilesThread::run() unsigned int rating = 0; QString comment; Q_FOREACH( const KUrl &url, urls ) { + if ( m_canceled ) + return; Nepomuk::Resource file( url, Soprano::Vocabulary::Xesam::File() ); files.insert( url, file ); fileRes.append( file ); -- 2.47.3