From 8489d7c46d4e909db28cf85ffc8ee6b4dea54423 Mon Sep 17 00:00:00 2001 From: Leo Franchi <lfranchi@kde.org> Date: Tue, 8 Mar 2011 22:43:15 -0500 Subject: [PATCH] make sure to stop (and wait) for script resolvers before deleting --- src/scriptresolver.cpp | 17 +++++++++++++++++ src/scriptresolver.h | 7 +++++-- src/tomahawkapp.cpp | 4 ++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/scriptresolver.cpp b/src/scriptresolver.cpp index dddf75a89..01b560098 100644 --- a/src/scriptresolver.cpp +++ b/src/scriptresolver.cpp @@ -12,6 +12,7 @@ ScriptResolver::ScriptResolver(const QString& exe) : , m_num_restarts( 0 ) , m_msgsize( 0 ) , m_ready( false ) + , m_stopped( false ) { qDebug() << Q_FUNC_INFO << exe; connect( &m_proc, SIGNAL(readyReadStandardError()), SLOT(readStderr()) ); @@ -116,6 +117,14 @@ void ScriptResolver::cmdExited(int code, QProcess::ExitStatus status) qDebug() << Q_FUNC_INFO << "SCRIPT EXITED, code" << code << "status" << status << m_cmd; Tomahawk::Pipeline::instance()->removeResolver( this ); + if( m_stopped ) + { + qDebug() << "*** Script resolver stopped "; + emit finished(); + + return; + } + if( m_num_restarts < 10 ) { m_num_restarts++; @@ -154,3 +163,11 @@ void ScriptResolver::doSetup( const QVariantMap& m ) m_ready = true; Tomahawk::Pipeline::instance()->addResolver( this ); } + +void +ScriptResolver::stop() +{ + m_stopped = true; + m_proc.kill(); +} + diff --git a/src/scriptresolver.h b/src/scriptresolver.h index bf7ae163a..5dd4c0902 100644 --- a/src/scriptresolver.h +++ b/src/scriptresolver.h @@ -25,9 +25,12 @@ public: virtual void resolve( const Tomahawk::query_ptr& query ); + void stop(); + QString exe() const { return m_cmd; } signals: - + void finished(); + public slots: private slots: @@ -47,7 +50,7 @@ private: quint32 m_msgsize; QByteArray m_msg; - bool m_ready; + bool m_ready, m_stopped; QJson::Parser m_parser; QJson::Serializer m_serializer; diff --git a/src/tomahawkapp.cpp b/src/tomahawkapp.cpp index 12bda2402..6fffad066 100644 --- a/src/tomahawkapp.cpp +++ b/src/tomahawkapp.cpp @@ -407,8 +407,8 @@ TomahawkApp::removeScriptResolver( const QString& path ) foreach( ScriptResolver* r, m_scriptResolvers ) { if( r->exe() == path ) { m_scriptResolvers.removeAll( r ); - - delete r; + connect( r, SIGNAL( finished() ), r, SLOT( deleteLater() ) ); + r->stop(); return; } }