[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    Re: KDE/kdebase/apps/dolphin/src/panels/information
From:       "Peter Penz" <peter.penz () gmx ! at>
Date:       2009-04-28 10:28:44
Message-ID: 20090428102844.200780 () gmx ! net
[Download RAW message or body]

> SVN commit 960318 by trueg:
> 
> Gracefully end the metadata loading thread. This should fix
> BUG: 190165

It seems m_canceled is never initialized properly...

> 
> 
>  M  +12 -0     metadatawidget.cpp  
> 
> 
> ---
> trunk/KDE/kdebase/apps/dolphin/src/panels/information/metadatawidget.cpp #960317:960318
> @@ -87,6 +87,7 @@
>      {
>      public:
>          LoadFilesThread(SharedData* sharedData, QMutex* mutex);
> +        ~LoadFilesThread();
>          void setFiles(const KUrl::List& urls);
>          virtual void run();
>  
> @@ -94,6 +95,7 @@
>          SharedData* m_sharedData;
>          QMutex* m_mutex;
>          KUrl::List m_urls;
> +        bool m_canceled;
>      };
>  
>      LoadFilesThread* loadFilesThread;
> @@ -115,6 +117,14 @@
>  {
>  }
>  
> +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 @@
>      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 );
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic