diff --git a/src/musicscanner.cpp b/src/musicscanner.cpp index 40f2ab0d4..6bc385f61 100644 --- a/src/musicscanner.cpp +++ b/src/musicscanner.cpp @@ -31,6 +31,10 @@ MusicScanner::MusicScanner( const QString& dir, quint32 bs ) // m_ext2mime.insert( "mp4", "audio/mp4" ); } +MusicScanner::~MusicScanner() +{ + qDebug() << Q_FUNC_INFO; +} void MusicScanner::startScan() @@ -76,8 +80,6 @@ MusicScanner::scan() // queued, so will only fire after all dirs have been scanned: connect( m_dirLister, SIGNAL( finished( const QMap& ) ), SLOT( listerFinished( const QMap& ) ), Qt::QueuedConnection ); - - connect( m_dirLister, SIGNAL( destroyed( QObject* ) ), SLOT( listerDestroyed( QObject* ) ) ); m_dirListerThreadController->start(); QMetaObject::invokeMethod( m_dirLister, "go" ); @@ -97,7 +99,7 @@ MusicScanner::listerFinished( const QMap& newmtimes ) // save mtimes, then quit thread DatabaseCommand_DirMtimes* cmd = new DatabaseCommand_DirMtimes( newmtimes ); - connect( cmd, SIGNAL( finished() ), SLOT( deleteLater() ) ); + connect( cmd, SIGNAL( finished() ), SLOT( deleteLister() ) ); Database::instance()->enqueue( QSharedPointer(cmd) ); qDebug() << "Scanning complete, saving to database. " @@ -106,26 +108,23 @@ MusicScanner::listerFinished( const QMap& newmtimes ) qDebug() << "Skipped the following files (no tags / no valid audio):"; foreach( const QString& s, m_skippedFiles ) qDebug() << s; - - QMetaObject::invokeMethod( this, "quitLister" ); } void -MusicScanner::quitLister() +MusicScanner::deleteLister() { qDebug() << Q_FUNC_INFO; - if( m_dirListerThreadController->isRunning() ) - { - qDebug() << "Scan thread still running, not deleting yet"; - m_dirListerThreadController->quit(); - QMetaObject::invokeMethod( this, "quitLister" ); - } - else - { - qDebug() << "deleting dir lister"; - m_dirLister->deleteLater(); - m_dirLister = 0; - } + connect( m_dirListerThreadController, SIGNAL( finished() ), SLOT( listerQuit() ) ); + m_dirListerThreadController->quit(); +} + +void +MusicScanner::listerQuit() +{ + qDebug() << Q_FUNC_INFO; + connect( m_dirLister, SIGNAL( destroyed( QObject* ) ), SLOT( listerDestroyed( QObject* ) ) ); + m_dirLister->deleteLater(); + m_dirLister = 0; } void diff --git a/src/musicscanner.h b/src/musicscanner.h index 8d35a3942..a0e60db72 100644 --- a/src/musicscanner.h +++ b/src/musicscanner.h @@ -86,6 +86,7 @@ Q_OBJECT public: MusicScanner( const QString& dir, quint32 bs = 0 ); + ~MusicScanner(); signals: //void fileScanned( QVariantMap ); @@ -97,7 +98,8 @@ private: private slots: void listerFinished( const QMap& newmtimes ); - void quitLister(); + void deleteLister(); + void listerQuit(); void listerDestroyed( QObject* dirLister ); void scanFile( const QFileInfo& fi ); void startScan(); diff --git a/src/scanmanager.cpp b/src/scanmanager.cpp index 504c9b5e2..25282ee6f 100644 --- a/src/scanmanager.cpp +++ b/src/scanmanager.cpp @@ -79,7 +79,7 @@ ScanManager::scannerFinished() } else { - delete m_scanner; + m_scanner->deleteLater(); m_scanner = 0; } }