1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-04-07 17:42:35 +02:00

make sure to stop (and wait) for script resolvers before deleting

This commit is contained in:
Leo Franchi 2011-03-08 22:43:15 -05:00
parent c1db858eff
commit 8489d7c46d
3 changed files with 24 additions and 4 deletions

View File

@ -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();
}

View File

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

View File

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