From 6e19a85d733ceff74482a7c7c069b6c92a5aa598 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Thu, 26 May 2011 00:47:24 -0400 Subject: [PATCH] Was trying to work on the crash on shutdown by making sure we explicitly delete items in tomahawkapp. Except where there are FIXMEs all are now explicitly deleted, in reverse order of instantiation. So far no help, but figured might as well keep the changes. --- src/tomahawkapp.cpp | 45 +++++++++++++++++++++++++++++++++++---------- src/tomahawkapp.h | 2 ++ 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index 752eaf451..158126a6b 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -151,6 +151,7 @@ using namespace Tomahawk; TomahawkApp::TomahawkApp( int& argc, char *argv[] ) : TOMAHAWK_APPLICATION( argc, argv ) , m_database( 0 ) + , m_databaseResolver( 0 ) , m_scanManager( 0 ) , m_audioEngine( 0 ) , m_servent( 0 ) @@ -309,26 +310,50 @@ TomahawkApp::~TomahawkApp() { qDebug() << Q_FUNC_INFO; +#ifdef LIBLASTFM_FOUND + delete m_scrobbler; +#endif + + //FIXME: m_session doesn't allow you to stop(), so is this safe? + delete m_session.staticContentService(); + // stop script resolvers foreach( Tomahawk::ExternalResolver* r, m_scriptResolvers.values() ) { delete r; } m_scriptResolvers.clear(); + Pipeline::instance()->removeResolver( m_databaseResolver ); + delete m_databaseResolver; - delete m_servent; - delete m_scanManager; + //FIXME: Delete stuff created in initLocalCollection ? + #ifndef TOMAHAWK_HEADLESS delete m_mainwindow; +#endif + + delete m_infoSystem; + + //FIXME: delete GeneratorFactory::registerFactory( "echonest", new EchonestFactory ); ? + + delete m_database; + + delete SipHandler::instance(); + + delete m_servent; + + Pipeline::instance()->stop(); + delete Pipeline::instance(); + + delete m_scanManager; + +#ifndef TOMAHAWK_HEADLESS delete m_audioEngine; #endif - delete SipHandler::instance(); - Pipeline::instance()->stop(); - - delete m_database; - delete m_infoSystem; - + delete TomahawkUtils::proxyFactory(); + delete TomahawkUtils::nam(); + qDebug() << "Finished shutdown."; } @@ -444,7 +469,8 @@ void TomahawkApp::setupPipeline() { // setup resolvers for local content, and (cached) remote collection content - Pipeline::instance()->addResolver( new DatabaseResolver( 100 ) ); + m_databaseResolver = new DatabaseResolver( 100 ); + Pipeline::instance()->addResolver( m_databaseResolver ); // load script resolvers foreach( QString resolver, TomahawkSettings::instance()->enabledScriptResolvers() ) @@ -537,7 +563,6 @@ TomahawkApp::setupSIP() #endif qDebug() << "Connecting SIP classes"; - //SipHandler::instance()->refreshProxy(); SipHandler::instance()->loadFromConfig( true ); } } diff --git a/src/tomahawkapp.h b/src/tomahawkapp.h index ea51dfa12..b9f13a824 100644 --- a/src/tomahawkapp.h +++ b/src/tomahawkapp.h @@ -42,6 +42,7 @@ #include "utils/tomahawkutils.h" #include "kdsingleapplicationguard/kdsingleapplicationguard.h" +class DatabaseResolver; class AudioEngine; class Database; class ScanManager; @@ -116,6 +117,7 @@ private: QHash m_scriptResolvers; Database* m_database; + DatabaseResolver* m_databaseResolver; ScanManager *m_scanManager; AudioEngine* m_audioEngine; Servent* m_servent;