- if (m_loadMetaDataThread == 0) {
- // The signal finished() has been emitted, but the thread has been marked
- // as invalid in the meantime. Just ignore the signal in this case.
- return;
+ // The thread that has emitted the finished() signal
+ // will get deleted and removed from m_metaDataThreads.
+ const int threadsCount = m_metaDataThreads.count();
+ for (int i = 0; i < threadsCount; ++i) {
+ KLoadMetaDataThread* thread = m_metaDataThreads[i];
+ if (thread == q->sender()) {
+ m_metaDataThreads.removeAt(i);
+ if (thread != m_latestMetaDataThread) {
+ // Ignore data of older threads, as the data got
+ // obsolete by m_latestMetaDataThread.
+ thread->deleteLater();
+ return;
+ }
+ }