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); @@ -81,11 +80,13 @@ setProcessedAmount(KJob::Bytes, processedAmount(KJob::Bytes) + job->m_size); if (m_time.elapsed()) emitSpeed(1000 * processedAmount(KJob::Bytes) / m_time.elapsed()); +} - - if (processedAmount(KJob::Files) == totalAmount(KJob::Files)) { +void RecursiveScanJob::scanJobDestroyed() +{ + m_destroyedJobs += 1; + if (m_destroyedJobs == totalAmount(KJob::Files)) { emitResult(); - qCDebug(LOKALIZE_LOG) << "finished in" << m_time.elapsed() << "msecs"; } } @@ -114,6 +115,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