1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-12 00:54:20 +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 topbar
utils utils
libtomahawk libtomahawk
libtomahawk/utils
mac mac
../alsa-playback ../alsa-playback

View File

@@ -3,6 +3,7 @@
#include "dllmacro.h" #include "dllmacro.h"
#include <QObject> #include <QObject>
#include <QThread>
#define RESPATH ":/data/" #define RESPATH ":/data/"
@@ -43,6 +44,23 @@ namespace TomahawkUtils
JDnsSharedRequest* m_dnsSharedRequest; 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 appConfigDir();
DLLEXPORT QDir appDataDir(); DLLEXPORT QDir appDataDir();

View File

@@ -34,6 +34,25 @@ MusicScanner::MusicScanner( const QString& dir, quint32 bs )
MusicScanner::~MusicScanner() MusicScanner::~MusicScanner()
{ {
qDebug() << Q_FUNC_INFO; 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 void

View File

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