From: Sebastian Trueg Date: Tue, 28 Apr 2009 10:10:20 +0000 (+0000) Subject: Gracefully end the metadata loading thread. This should fix X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/3e6bcdde69a561b8937bb963038c1a22b966d285 Gracefully end the metadata loading thread. This should fix BUG: 190165 svn path=/trunk/KDE/kdebase/apps/; revision=960318 --- 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 );