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; } }