1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-11 08:34:34 +02:00

Hopefully solve crashing on exit during scanning

This commit is contained in:
Jeff Mitchell
2011-02-17 12:43:56 -05:00
parent 741ceff576
commit 696ba91a79
4 changed files with 57 additions and 5 deletions

View File

@@ -119,6 +119,7 @@ INCLUDE_DIRECTORIES(
topbar
utils
libtomahawk
libtomahawk/utils
mac
../alsa-playback

View File

@@ -3,6 +3,7 @@
#include "dllmacro.h"
#include <QObject>
#include <QThread>
#define RESPATH ":/data/"
@@ -41,7 +42,24 @@ namespace TomahawkUtils
private:
JDnsShared* m_dnsShared;
JDnsSharedRequest* m_dnsSharedRequest;
};
};
class DLLEXPORT Sleep : public QThread
{
public:
static void sleep(unsigned long secs)
{
QThread::sleep(secs);
}
static void msleep(unsigned long msecs)
{
QThread::msleep(msecs);
}
static void usleep(unsigned long usecs)
{
QThread::usleep(usecs);
}
};
DLLEXPORT QDir appConfigDir();
DLLEXPORT QDir appDataDir();

View File

@@ -34,6 +34,25 @@ MusicScanner::MusicScanner( const QString& dir, quint32 bs )
MusicScanner::~MusicScanner()
{
qDebug() << Q_FUNC_INFO;
if( m_dirListerThreadController )
{
m_dirListerThreadController->quit();
while( !m_dirListerThreadController->isFinished() )
{
QCoreApplication::processEvents( QEventLoop::AllEvents, 200 );
TomahawkUtils::Sleep::msleep(100);
}
if( m_dirLister )
{
delete m_dirLister;
m_dirLister = 0;
}
delete m_dirListerThreadController;
m_dirListerThreadController = 0;
}
}
void

View File

@@ -2,9 +2,11 @@
#include <QDebug>
#include <QThread>
#include <QCoreApplication>
#include "musicscanner.h"
#include "tomahawksettings.h"
#include "tomahawkutils.h"
ScanManager* ScanManager::s_instance = 0;
@@ -30,14 +32,26 @@ ScanManager::ScanManager( QObject* parent )
ScanManager::~ScanManager()
{
qDebug() << Q_FUNC_INFO;
s_instance = 0;
if( m_musicScannerThreadController )
{
m_musicScannerThreadController->quit();
m_musicScannerThreadController->deleteLater();
while( !m_musicScannerThreadController->isFinished() )
{
QCoreApplication::processEvents( QEventLoop::AllEvents, 200 );
TomahawkUtils::Sleep::msleep(100);
}
if( m_scanner )
{
delete m_scanner;
m_scanner = 0;
}
delete m_musicScannerThreadController;
m_musicScannerThreadController = 0;
}
m_musicScannerThreadController = 0;
m_scanner = 0;
}