mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-01 03:40:16 +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:
@@ -123,7 +123,7 @@ MusicScanner::listerQuit()
|
|||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
connect( m_dirLister, SIGNAL( destroyed( QObject* ) ), SLOT( listerDestroyed( QObject* ) ) );
|
connect( m_dirLister, SIGNAL( destroyed( QObject* ) ), SLOT( listerDestroyed( QObject* ) ) );
|
||||||
m_dirLister->deleteLater();
|
delete m_dirLister;
|
||||||
m_dirLister = 0;
|
m_dirLister = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -59,7 +59,6 @@ ScanManager::runManualScan( const QString& path )
|
|||||||
m_scanner = new MusicScanner( path );
|
m_scanner = new MusicScanner( path );
|
||||||
m_scanner->moveToThread( m_musicScannerThreadController );
|
m_scanner->moveToThread( m_musicScannerThreadController );
|
||||||
connect( m_scanner, SIGNAL( finished() ), SLOT( scannerFinished() ) );
|
connect( m_scanner, SIGNAL( finished() ), SLOT( scannerFinished() ) );
|
||||||
connect( m_scanner, SIGNAL( destroyed( QObject* ) ), SLOT( scannerDestroyed( QObject* ) ) );
|
|
||||||
m_musicScannerThreadController->start( QThread::IdlePriority );
|
m_musicScannerThreadController->start( QThread::IdlePriority );
|
||||||
QMetaObject::invokeMethod( m_scanner, "startScan" );
|
QMetaObject::invokeMethod( m_scanner, "startScan" );
|
||||||
}
|
}
|
||||||
@@ -71,17 +70,17 @@ void
|
|||||||
ScanManager::scannerFinished()
|
ScanManager::scannerFinished()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
if( m_musicScannerThreadController->isRunning() )
|
connect( m_musicScannerThreadController, SIGNAL( finished() ), SLOT( scannerQuit() ) );
|
||||||
{
|
|
||||||
qDebug() << "Scan thread still running, not deleting yet";
|
|
||||||
m_musicScannerThreadController->quit();
|
m_musicScannerThreadController->quit();
|
||||||
QMetaObject::invokeMethod( this, "scannerFinished" );
|
}
|
||||||
}
|
|
||||||
else
|
void
|
||||||
{
|
ScanManager::scannerQuit()
|
||||||
m_scanner->deleteLater();
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO;
|
||||||
|
connect( m_scanner, SIGNAL( destroyed( QObject* ) ), SLOT( scannerDestroyed( QObject* ) ) );
|
||||||
|
delete m_scanner;
|
||||||
m_scanner = 0;
|
m_scanner = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -90,5 +89,6 @@ ScanManager::scannerDestroyed( QObject* scanner )
|
|||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
m_musicScannerThreadController->deleteLater();
|
m_musicScannerThreadController->deleteLater();
|
||||||
m_musicScannerThreadController = 0;
|
m_musicScannerThreadController = 0;
|
||||||
|
emit finished();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,11 @@ public:
|
|||||||
|
|
||||||
void runManualScan( const QString& path );
|
void runManualScan( const QString& path );
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void finished();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void scannerQuit();
|
||||||
void scannerFinished();
|
void scannerFinished();
|
||||||
void scannerDestroyed( QObject* scanner );
|
void scannerDestroyed( QObject* scanner );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user