diff options
author | Uwe Klotz <uklotz@mixxx.org> | 2018-12-28 12:07:06 +0100 |
---|---|---|
committer | Uwe Klotz <uklotz@mixxx.org> | 2018-12-28 12:12:58 +0100 |
commit | dcf6301b457ebe60c1a08c9b3a433d304ef34e6a (patch) | |
tree | 3094582bfd204ddf8947ce1ba9751cc0f1d2d621 | |
parent | 78cef8f73aacf923bbc2e8058c6d2eaa9c9607d6 (diff) |
Stop worker threads before exiting
-rw-r--r-- | src/analyzer/trackanalysisscheduler.cpp | 2 | ||||
-rw-r--r-- | src/library/analysisfeature.cpp | 7 | ||||
-rw-r--r-- | src/library/analysisfeature.h | 4 | ||||
-rw-r--r-- | src/library/library.cpp | 8 | ||||
-rw-r--r-- | src/library/library.h | 2 | ||||
-rw-r--r-- | src/mixer/playermanager.cpp | 5 | ||||
-rw-r--r-- | src/mixxx.cpp | 3 |
7 files changed, 26 insertions, 5 deletions
diff --git a/src/analyzer/trackanalysisscheduler.cpp b/src/analyzer/trackanalysisscheduler.cpp index d88809b1c4..cb48a52e83 100644 --- a/src/analyzer/trackanalysisscheduler.cpp +++ b/src/analyzer/trackanalysisscheduler.cpp @@ -264,9 +264,11 @@ bool TrackAnalysisScheduler::submitNextTrack(Worker* worker) { void TrackAnalysisScheduler::stop() { kLogger.debug() << "Stopping"; + m_queuedTrackIds.clear(); for (auto& worker: m_workers) { worker.stopThread(); } + m_workers.clear(); } TrackPointer TrackAnalysisScheduler::loadTrackById(TrackId trackId) { diff --git a/src/library/analysisfeature.cpp b/src/library/analysisfeature.cpp index 9d9e77e42f..83de1a8b62 100644 --- a/src/library/analysisfeature.cpp +++ b/src/library/analysisfeature.cpp @@ -54,9 +54,10 @@ AnalysisFeature::AnalysisFeature( setTitleDefault(); } -AnalysisFeature::~AnalysisFeature() { - // TODO(XXX) delete these - //delete m_pLibraryTableModel; +void AnalysisFeature::stop() { + if (m_pTrackAnalysisScheduler) { + m_pTrackAnalysisScheduler->stop(); + } } void AnalysisFeature::setTitleDefault() { diff --git a/src/library/analysisfeature.h b/src/library/analysisfeature.h index 29d97f7be2..89690d2702 100644 --- a/src/library/analysisfeature.h +++ b/src/library/analysisfeature.h @@ -26,7 +26,9 @@ class AnalysisFeature : public LibraryFeature { public: AnalysisFeature(Library* parent, UserSettingsPointer pConfig); - virtual ~AnalysisFeature(); + ~AnalysisFeature() override = default; + + void stop(); QVariant title(); QIcon getIcon(); diff --git a/src/library/library.cpp b/src/library/library.cpp index 8a07715b7c..d95416941d 100644 --- a/src/library/library.cpp +++ b/src/library/library.cpp @@ -211,6 +211,14 @@ Library::~Library() { delete m_pTrackCollection; } +void Library::stopFeatures() { + if (m_pAnalysisFeature) { + m_pAnalysisFeature->stop(); + m_pAnalysisFeature = nullptr; + } + m_scanner.slotCancel(); +} + void Library::bindSidebarWidget(WLibrarySidebar* pSidebarWidget) { m_pLibraryControl->bindSidebarWidget(pSidebarWidget); diff --git a/src/library/library.h b/src/library/library.h index 70b51e1d7d..fa686a1406 100644 --- a/src/library/library.h +++ b/src/library/library.h @@ -51,6 +51,8 @@ class Library: public QObject, RecordingManager* pRecordingManager); ~Library() override; + void stopFeatures(); + mixxx::DbConnectionPoolPtr dbConnectionPool() const { return m_pDbConnectionPool; } diff --git a/src/mixer/playermanager.cpp b/src/mixer/playermanager.cpp index 3a3775b500..d2b7bb4d56 100644 --- a/src/mixer/playermanager.cpp +++ b/src/mixer/playermanager.cpp @@ -103,7 +103,10 @@ PlayerManager::~PlayerManager() { delete m_pCONumMicrophones; delete m_pCONumAuxiliaries; - m_pTrackAnalysisScheduler.reset(); + if (m_pTrackAnalysisScheduler) { + m_pTrackAnalysisScheduler->stop(); + m_pTrackAnalysisScheduler.reset(); + } } void PlayerManager::bindToLibrary(Library* pLibrary) { diff --git a/src/mixxx.cpp b/src/mixxx.cpp index 69a03c454c..438f4ed0b9 100644 --- a/src/mixxx.cpp +++ b/src/mixxx.cpp @@ -603,6 +603,9 @@ void MixxxMainWindow::finalize() { qWarning() << "WMainMenuBar was not deleted by our sendPostedEvents trick."; } + qDebug() << t.elapsed(false).debugMillisWithUnit() << "stopping pending Library tasks"; + m_pLibrary->stopFeatures(); + // SoundManager depend on Engine and Config qDebug() << t.elapsed(false).debugMillisWithUnit() << "deleting SoundManager"; delete m_pSoundManager; |