diff --git a/src/tm/jobs.h b/src/tm/jobs.h --- a/src/tm/jobs.h +++ b/src/tm/jobs.h @@ -338,9 +338,7 @@ explicit ScanJobFeedingBack(const QString& filePath, const QString& dbName) : QObject(), ScanJob(filePath, dbName) - { - setAutoDelete(false); - } + {} protected: void run() override diff --git a/src/tm/tmscanapi.h b/src/tm/tmscanapi.h --- a/src/tm/tmscanapi.h +++ b/src/tm/tmscanapi.h @@ -57,6 +57,7 @@ public slots: void scanJobFinished(ScanJobFeedingBack*); + void scanJobDestroyed(); protected: bool doKill() override; @@ -64,6 +65,7 @@ QString m_dbName; QTime m_time; QVector m_jobs; + qulonglong m_destroyedJobs = 0; }; } diff --git a/src/tm/tmscanapi.cpp b/src/tm/tmscanapi.cpp --- a/src/tm/tmscanapi.cpp +++ b/src/tm/tmscanapi.cpp @@ -73,7 +73,6 @@ void RecursiveScanJob::scanJobFinished(ScanJobFeedingBack* j) { - j->deleteLater(); ScanJob* job = static_cast(j); setProcessedAmount(KJob::Files, processedAmount(KJob::Files) + 1); @@ -89,6 +88,14 @@ } } +void RecursiveScanJob::scanJobDestroyed() +{ + m_destroyedJobs += 1; + if (m_destroyedJobs == totalAmount(KJob::Files)) { + emitResult(); + } +} + void RecursiveScanJob::start() { m_time.start(); @@ -114,6 +121,7 @@ if (Catalog::extIsSupported(filePath)) { ScanJobFeedingBack* job = new ScanJobFeedingBack(filePath, dbName); QObject::connect(job, &ScanJobFeedingBack::done, metaJob, &RecursiveScanJob::scanJobFinished); + QObject::connect(job, &QObject::destroyed, metaJob, &RecursiveScanJob::scanJobDestroyed); TM::threadPool()->start(job, SCAN); result.append(job); } else