From 6cb07e203ba88667daf5248bb59842d36b1a222c Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Thu, 22 Jan 2026 22:10:13 +0500 Subject: [PATCH] fix(ResourceFolderModel): don't read state from off-thread task Signed-off-by: Octol1ttle --- launcher/minecraft/mod/ResourceFolderModel.cpp | 14 +++++++++----- launcher/minecraft/mod/ResourceFolderModel.h | 5 ++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/launcher/minecraft/mod/ResourceFolderModel.cpp b/launcher/minecraft/mod/ResourceFolderModel.cpp index b0082653d..3473379e3 100644 --- a/launcher/minecraft/mod/ResourceFolderModel.cpp +++ b/launcher/minecraft/mod/ResourceFolderModel.cpp @@ -38,9 +38,12 @@ ResourceFolderModel::ResourceFolderModel(const QDir& dir, BaseInstance* instance m_dir.setSorting(QDir::Name | QDir::IgnoreCase | QDir::LocaleAware); connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &ResourceFolderModel::directoryChanged); - connect(&m_helper_thread_task, &ConcurrentTask::finished, this, [this] { m_helper_thread_task.clear(); }); + connect(&m_resourceResolver, &ConcurrentTask::finished, this, [this] { + m_resourceResolver.clear(); + m_resourceResolverRunning = false; + }); if (APPLICATION_DYN) { // in tests the application macro doesn't work - m_helper_thread_task.setMaxConcurrent(APPLICATION->settings()->get("NumberOfConcurrentTasks").toInt()); + m_resourceResolver.setMaxConcurrent(APPLICATION->settings()->get("NumberOfConcurrentTasks").toInt()); } } @@ -382,10 +385,11 @@ void ResourceFolderModel::resolveResource(Resource::Ptr res) }, Qt::ConnectionType::QueuedConnection); - m_helper_thread_task.addTask(task); + m_resourceResolver.addTask(task); - if (!m_helper_thread_task.isRunning()) { - QThreadPool::globalInstance()->start(&m_helper_thread_task); + if (!m_resourceResolverRunning) { + QThreadPool::globalInstance()->start(&m_resourceResolver); + m_resourceResolverRunning = true; } } diff --git a/launcher/minecraft/mod/ResourceFolderModel.h b/launcher/minecraft/mod/ResourceFolderModel.h index 0526b5bbf..b6343a807 100644 --- a/launcher/minecraft/mod/ResourceFolderModel.h +++ b/launcher/minecraft/mod/ResourceFolderModel.h @@ -261,7 +261,10 @@ class ResourceFolderModel : public QAbstractListModel { // Represents the relationship between a resource's internal ID and it's row position on the model. QMap m_resources_index; - ConcurrentTask m_helper_thread_task; + // Runs off-thread + ConcurrentTask m_resourceResolver; + bool m_resourceResolverRunning = false; + QMap m_active_parse_tasks; std::atomic m_next_resolution_ticket = 0; };