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

Properly fix deletion of worker and cache objects in separate threads that are not the GUI thread.

This commit is contained in:
Alejandro Wainzinger 2011-08-15 15:51:39 -07:00
parent 767602c0dc
commit 2dbf992e56
2 changed files with 22 additions and 7 deletions

View File

@ -59,13 +59,15 @@ InfoSystem::InfoSystem( QObject *parent )
qDebug() << Q_FUNC_INFO;
m_infoSystemCacheThreadController = new InfoSystemCacheThread( this );
m_cache = m_infoSystemCacheThreadController->cache();
//m_cache.data()->moveToThread( m_infoSystemCacheThreadController );
m_cache = QWeakPointer< InfoSystemCache >( new InfoSystemCache() );
m_cache.data()->moveToThread( m_infoSystemCacheThreadController );
m_infoSystemCacheThreadController->setCache( m_cache );
m_infoSystemCacheThreadController->start( QThread::IdlePriority );
m_infoSystemWorkerThreadController = new InfoSystemWorkerThread( this );
m_worker = m_infoSystemWorkerThreadController->worker();
//m_worker.data()->moveToThread( m_infoSystemWorkerThreadController );
m_worker = QWeakPointer< InfoSystemWorker >( new InfoSystemWorker() );
m_worker.data()->moveToThread( m_infoSystemWorkerThreadController );
m_infoSystemWorkerThreadController->setWorker( m_worker );
m_infoSystemWorkerThreadController->start();
QMetaObject::invokeMethod( m_worker.data(), "init", Qt::QueuedConnection, Q_ARG( QWeakPointer< Tomahawk::InfoSystem::InfoSystemCache >, m_cache ) );
@ -159,7 +161,6 @@ InfoSystem::pushInfo( const QString &caller, const InfoTypeMap &input )
InfoSystemCacheThread::InfoSystemCacheThread( QObject *parent )
: QThread( parent )
{
m_cache = QWeakPointer< InfoSystemCache >( new InfoSystemCache() );
}
InfoSystemCacheThread::~InfoSystemCacheThread()
@ -179,21 +180,27 @@ InfoSystemCacheThread::cache() const
return m_cache;
}
void
InfoSystemCacheThread::setCache( QWeakPointer< InfoSystemCache > cache )
{
m_cache = cache;
}
InfoSystemWorkerThread::InfoSystemWorkerThread( QObject *parent )
: QThread( parent )
{
m_worker = QWeakPointer< InfoSystemWorker >( new InfoSystemWorker() );
}
InfoSystemWorkerThread::~InfoSystemWorkerThread()
{
delete m_worker.data();
}
void
InfoSystemWorkerThread::InfoSystemWorkerThread::run()
{
exec();
if( m_worker )
delete m_worker.data();
}
QWeakPointer< InfoSystemWorker >
@ -202,6 +209,12 @@ InfoSystemWorkerThread::worker() const
return m_worker;
}
void
InfoSystemWorkerThread::setWorker( QWeakPointer< InfoSystemWorker > worker )
{
m_worker = worker;
}
} //namespace InfoSystem

View File

@ -169,6 +169,7 @@ public:
void run();
QWeakPointer< InfoSystemCache > cache() const;
void setCache( QWeakPointer< InfoSystemCache > cache );
private:
QWeakPointer< InfoSystemCache > m_cache;
@ -184,6 +185,7 @@ public:
void run();
QWeakPointer< InfoSystemWorker > worker() const;
void setWorker( QWeakPointer< InfoSystemWorker > worker );
private:
QWeakPointer< InfoSystemWorker > m_worker;