From 8b229dd4e3eba52bfb73688ed9fa988b02489928 Mon Sep 17 00:00:00 2001
From: Jeff Mitchell <tomahawk@jefferai.org>
Date: Tue, 3 May 2011 22:18:13 -0400
Subject: [PATCH] Fix other area scanner is destroyed to do it in-thread

---
 src/scanmanager.cpp | 39 ++++++++++++++++-----------------------
 src/scanmanager.h   |  2 --
 2 files changed, 16 insertions(+), 25 deletions(-)

diff --git a/src/scanmanager.cpp b/src/scanmanager.cpp
index 34a6e9cde..057532ab2 100644
--- a/src/scanmanager.cpp
+++ b/src/scanmanager.cpp
@@ -245,18 +245,6 @@ ScanManager::deferredScanTimeout()
 void
 ScanManager::scannerFinished()
 {
-    qDebug() << Q_FUNC_INFO;
-    connect( m_musicScannerThreadController, SIGNAL( finished() ), SLOT( scannerQuit() ) );
-    m_musicScannerThreadController->quit();
-}
-
-
-void
-ScanManager::scannerQuit()
-{
-    qDebug() << Q_FUNC_INFO;
-    connect( m_scanner.data(), SIGNAL( destroyed( QObject* ) ), SLOT( scannerDestroyed( QObject* ) ) );
-
     if ( !m_scanner.isNull() )
     {
         QMetaObject::invokeMethod( m_scanner.data(), "deleteLater", Qt::QueuedConnection );
@@ -266,17 +254,22 @@ ScanManager::scannerQuit()
             QCoreApplication::processEvents( QEventLoop::AllEvents, 200 );
             TomahawkUtils::Sleep::msleep( 100 );
         }
+
+        if ( m_musicScannerThreadController )
+            m_musicScannerThreadController->quit();
+
+        if( m_musicScannerThreadController )
+        {
+            while( !m_musicScannerThreadController->isFinished() )
+            {
+                qDebug() << Q_FUNC_INFO << " scanner thread controller not finished, processing events";
+                QCoreApplication::processEvents( QEventLoop::AllEvents, 200 );
+                TomahawkUtils::Sleep::msleep( 100 );
+            }
+
+            delete m_musicScannerThreadController;
+            m_musicScannerThreadController = 0;
+        }
     }
-}
-
-
-void
-ScanManager::scannerDestroyed( QObject* scanner )
-{
-    Q_UNUSED( scanner );
-    qDebug() << Q_FUNC_INFO;
-    m_musicScannerThreadController->deleteLater();
-    m_musicScannerThreadController = 0;
     emit finished();
 }
-
diff --git a/src/scanmanager.h b/src/scanmanager.h
index e4ebb2e33..67895c728 100644
--- a/src/scanmanager.h
+++ b/src/scanmanager.h
@@ -52,9 +52,7 @@ public slots:
     void removeWatchedDir( const QString& path );
 
 private slots:
-    void scannerQuit();
     void scannerFinished();
-    void scannerDestroyed( QObject* scanner );
     
     void runStartupScan();
     void queuedScanTimeout();