1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-04-14 04:51:53 +02:00

All the threads are happy now.

Note: you can't call deleteLater() on an object in a thread after you quit() the thread because deleteLater relies on the object's event loop to be running...
This commit is contained in:
Jeff Mitchell 2011-02-15 16:28:58 -05:00
parent a28c6998a3
commit 4af60befcd
3 changed files with 17 additions and 13 deletions

View File

@ -123,7 +123,7 @@ MusicScanner::listerQuit()
{
qDebug() << Q_FUNC_INFO;
connect( m_dirLister, SIGNAL( destroyed( QObject* ) ), SLOT( listerDestroyed( QObject* ) ) );
m_dirLister->deleteLater();
delete m_dirLister;
m_dirLister = 0;
}

View File

@ -59,7 +59,6 @@ ScanManager::runManualScan( const QString& path )
m_scanner = new MusicScanner( path );
m_scanner->moveToThread( m_musicScannerThreadController );
connect( m_scanner, SIGNAL( finished() ), SLOT( scannerFinished() ) );
connect( m_scanner, SIGNAL( destroyed( QObject* ) ), SLOT( scannerDestroyed( QObject* ) ) );
m_musicScannerThreadController->start( QThread::IdlePriority );
QMetaObject::invokeMethod( m_scanner, "startScan" );
}
@ -71,17 +70,17 @@ void
ScanManager::scannerFinished()
{
qDebug() << Q_FUNC_INFO;
if( m_musicScannerThreadController->isRunning() )
{
qDebug() << "Scan thread still running, not deleting yet";
m_musicScannerThreadController->quit();
QMetaObject::invokeMethod( this, "scannerFinished" );
}
else
{
m_scanner->deleteLater();
m_scanner = 0;
}
connect( m_musicScannerThreadController, SIGNAL( finished() ), SLOT( scannerQuit() ) );
m_musicScannerThreadController->quit();
}
void
ScanManager::scannerQuit()
{
qDebug() << Q_FUNC_INFO;
connect( m_scanner, SIGNAL( destroyed( QObject* ) ), SLOT( scannerDestroyed( QObject* ) ) );
delete m_scanner;
m_scanner = 0;
}
void
@ -90,5 +89,6 @@ ScanManager::scannerDestroyed( QObject* scanner )
qDebug() << Q_FUNC_INFO;
m_musicScannerThreadController->deleteLater();
m_musicScannerThreadController = 0;
emit finished();
}

View File

@ -20,7 +20,11 @@ public:
void runManualScan( const QString& path );
signals:
void finished();
private slots:
void scannerQuit();
void scannerFinished();
void scannerDestroyed( QObject* scanner );