mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-01 03:40:16 +02:00
make sure to stop (and wait) for script resolvers before deleting
This commit is contained in:
@@ -12,6 +12,7 @@ ScriptResolver::ScriptResolver(const QString& exe) :
|
|||||||
, m_num_restarts( 0 )
|
, m_num_restarts( 0 )
|
||||||
, m_msgsize( 0 )
|
, m_msgsize( 0 )
|
||||||
, m_ready( false )
|
, m_ready( false )
|
||||||
|
, m_stopped( false )
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO << exe;
|
qDebug() << Q_FUNC_INFO << exe;
|
||||||
connect( &m_proc, SIGNAL(readyReadStandardError()), SLOT(readStderr()) );
|
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;
|
qDebug() << Q_FUNC_INFO << "SCRIPT EXITED, code" << code << "status" << status << m_cmd;
|
||||||
Tomahawk::Pipeline::instance()->removeResolver( this );
|
Tomahawk::Pipeline::instance()->removeResolver( this );
|
||||||
|
|
||||||
|
if( m_stopped )
|
||||||
|
{
|
||||||
|
qDebug() << "*** Script resolver stopped ";
|
||||||
|
emit finished();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if( m_num_restarts < 10 )
|
if( m_num_restarts < 10 )
|
||||||
{
|
{
|
||||||
m_num_restarts++;
|
m_num_restarts++;
|
||||||
@@ -154,3 +163,11 @@ void ScriptResolver::doSetup( const QVariantMap& m )
|
|||||||
m_ready = true;
|
m_ready = true;
|
||||||
Tomahawk::Pipeline::instance()->addResolver( this );
|
Tomahawk::Pipeline::instance()->addResolver( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ScriptResolver::stop()
|
||||||
|
{
|
||||||
|
m_stopped = true;
|
||||||
|
m_proc.kill();
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -25,8 +25,11 @@ public:
|
|||||||
|
|
||||||
virtual void resolve( const Tomahawk::query_ptr& query );
|
virtual void resolve( const Tomahawk::query_ptr& query );
|
||||||
|
|
||||||
|
void stop();
|
||||||
|
|
||||||
QString exe() const { return m_cmd; }
|
QString exe() const { return m_cmd; }
|
||||||
signals:
|
signals:
|
||||||
|
void finished();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
@@ -47,7 +50,7 @@ private:
|
|||||||
quint32 m_msgsize;
|
quint32 m_msgsize;
|
||||||
QByteArray m_msg;
|
QByteArray m_msg;
|
||||||
|
|
||||||
bool m_ready;
|
bool m_ready, m_stopped;
|
||||||
|
|
||||||
QJson::Parser m_parser;
|
QJson::Parser m_parser;
|
||||||
QJson::Serializer m_serializer;
|
QJson::Serializer m_serializer;
|
||||||
|
@@ -407,8 +407,8 @@ TomahawkApp::removeScriptResolver( const QString& path )
|
|||||||
foreach( ScriptResolver* r, m_scriptResolvers ) {
|
foreach( ScriptResolver* r, m_scriptResolvers ) {
|
||||||
if( r->exe() == path ) {
|
if( r->exe() == path ) {
|
||||||
m_scriptResolvers.removeAll( r );
|
m_scriptResolvers.removeAll( r );
|
||||||
|
connect( r, SIGNAL( finished() ), r, SLOT( deleteLater() ) );
|
||||||
delete r;
|
r->stop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user