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();