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:
parent
c1db858eff
commit
8489d7c46d
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user