From 4f08ba3590360427799b589882c4ce438e9dace2 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Fri, 30 Jun 2023 00:11:26 +0200 Subject: [PATCH] patterns: Fixed race condition when evaluating patterns --- lib/external/pattern_language | 2 +- .../builtin/include/content/views/view_pattern_data.hpp | 1 + .../builtin/source/content/views/view_pattern_data.cpp | 9 ++++----- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/external/pattern_language b/lib/external/pattern_language index 337a45a76..72ab71a91 160000 --- a/lib/external/pattern_language +++ b/lib/external/pattern_language @@ -1 +1 @@ -Subproject commit 337a45a7684e46ae2c7462f82097af428b7d52d3 +Subproject commit 72ab71a9166063f4688bc87d55be08ead4f0c1d7 diff --git a/plugins/builtin/include/content/views/view_pattern_data.hpp b/plugins/builtin/include/content/views/view_pattern_data.hpp index 7beadc1b2..ee07723ab 100644 --- a/plugins/builtin/include/content/views/view_pattern_data.hpp +++ b/plugins/builtin/include/content/views/view_pattern_data.hpp @@ -21,6 +21,7 @@ namespace hex::plugin::builtin { private: ui::PatternDrawer m_patternDrawer; bool m_shouldReset = false; + u64 m_lastRunId = 0; }; } \ No newline at end of file diff --git a/plugins/builtin/source/content/views/view_pattern_data.cpp b/plugins/builtin/source/content/views/view_pattern_data.cpp index 12192947f..d5455200c 100644 --- a/plugins/builtin/source/content/views/view_pattern_data.cpp +++ b/plugins/builtin/source/content/views/view_pattern_data.cpp @@ -20,10 +20,6 @@ namespace hex::plugin::builtin { }); this->m_patternDrawer.setSelectionCallback([](Region region){ ImHexApi::HexEditor::setSelection(region); }); - - EventManager::subscribe([this](const auto&){ - this->m_shouldReset = true; - }); } ViewPatternData::~ViewPatternData() { @@ -36,11 +32,14 @@ namespace hex::plugin::builtin { if (ImHexApi::Provider::isValid()) { auto &runtime = ContentRegistry::PatternLanguage::getRuntime(); if (!runtime.arePatternsValid()) { + this->m_shouldReset = true; this->m_patternDrawer.reset(); this->m_patternDrawer.draw({}); } else { if (TRY_LOCK(ContentRegistry::PatternLanguage::getRuntimeLock())) { - if (this->m_shouldReset) { + auto runId = runtime.getRunId(); + if (this->m_shouldReset || this->m_lastRunId != runId) { + this->m_lastRunId = runId; this->m_patternDrawer.reset(); this->m_shouldReset = false; }