tdeio/kdirlister: add some cleanups for LocalURLJob's

Theoretically the lack of those could lead to segfaults and data
corruptions, hard to debug but very rare.

Signed-off-by: Alexander Golubev <fatzer2@gmail.com>
pull/259/head
Alexander Golubev 9 months ago committed by TDE Gitea
parent 2c18d241d8
commit f34601e77a

@ -1998,6 +1998,11 @@ void KDirLister::stop()
{ {
kdDebug(7003) << k_funcinfo << endl; kdDebug(7003) << k_funcinfo << endl;
s_pCache->stop( this ); s_pCache->stop( this );
for( auto it = d->openURLContext.begin(); it != d->openURLContext.end(); ++it ) {
it.key()->disconnect( this );
it.key()->kill();
}
d->openURLContext.clear();
d->m_referenceURLMap.clear(); d->m_referenceURLMap.clear();
} }
@ -2005,6 +2010,17 @@ void KDirLister::stop( const KURL& _url )
{ {
kdDebug(7003) << k_funcinfo << _url.prettyURL() << endl; kdDebug(7003) << k_funcinfo << _url.prettyURL() << endl;
s_pCache->stop( this, _url ); s_pCache->stop( this, _url );
TQPtrList<TDEIO::Job> toRemove;
for( auto it = d->openURLContext.begin(); it != d->openURLContext.end(); ++it ) {
if( it.data().url ==_url ) {
it.key()->disconnect( this );
it.key()->kill();
toRemove.append(it.key());
}
}
for(const auto &job: toRemove) {
d->openURLContext.remove(job);
}
d->m_referenceURLMap.remove(_url.url()); d->m_referenceURLMap.remove(_url.url());
} }

Loading…
Cancel
Save