From 1761033ceecb20f77df198ec9ce8898e893b9584 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sat, 16 Aug 2025 11:49:55 +0200 Subject: [PATCH] fix: Crash when changing find filter too quickly --- plugins/builtin/source/content/views/view_find.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/plugins/builtin/source/content/views/view_find.cpp b/plugins/builtin/source/content/views/view_find.cpp index 2e02e94e8..96ce4f887 100644 --- a/plugins/builtin/source/content/views/view_find.cpp +++ b/plugins/builtin/source/content/views/view_find.cpp @@ -1006,14 +1006,19 @@ namespace hex::plugin::builtin { if (m_filterTask.isRunning()) m_filterTask.interrupt(); + static std::mutex mutex; + std::lock_guard lock(mutex); + if (!m_currFilter->empty()) { - m_filterTask = TaskManager::createTask("hex.builtin.task.filtering_data", currOccurrences.size(), [this, provider, &currOccurrences](Task &task) { + m_filterTask = TaskManager::createTask("hex.builtin.task.filtering_data", currOccurrences.size(), [this, provider, &currOccurrences, filter = m_currFilter.get(provider)](Task &task) { + std::lock_guard lock(mutex); + u64 progress = 0; - std::erase_if(currOccurrences, [this, provider, &task, &progress](const auto ®ion) { + std::erase_if(currOccurrences, [this, provider, &task, &progress, &filter](const auto ®ion) { task.update(progress); progress += 1; - return !hex::containsIgnoreCase(this->decodeValue(provider, region), m_currFilter.get(provider)); + return !hex::containsIgnoreCase(this->decodeValue(provider, region), filter); }); }); }