From 673027c82d24d3d1242530a77fe6cf3c0d9b5401 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 27 Jun 2022 17:01:21 +0200 Subject: [PATCH] fix: Crash on exit --- lib/libimhex/source/api/imhex_api.cpp | 4 ++-- main/source/init/tasks.cpp | 8 ++++---- .../builtin/source/content/views/view_pattern_editor.cpp | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/libimhex/source/api/imhex_api.cpp b/lib/libimhex/source/api/imhex_api.cpp index 50770c7b2..139414665 100644 --- a/lib/libimhex/source/api/imhex_api.cpp +++ b/lib/libimhex/source/api/imhex_api.cpp @@ -231,7 +231,7 @@ namespace hex { } bool isValid() { - return !s_providers.empty(); + return !s_providers.empty() && s_currentProvider < s_providers.size(); } void add(prv::Provider *provider) { @@ -246,7 +246,7 @@ namespace hex { s_providers.erase(it); - if (it - s_providers.begin() == s_currentProvider) + if (it - s_providers.begin() == s_currentProvider && !s_providers.empty()) setCurrentProvider(0); delete provider; diff --git a/main/source/init/tasks.cpp b/main/source/init/tasks.cpp index b2f66fbbb..04e2dd7df 100644 --- a/main/source/init/tasks.cpp +++ b/main/source/init/tasks.cpp @@ -170,6 +170,10 @@ namespace hex::init { } bool deleteSharedData() { + while (ImHexApi::Provider::isValid()) + ImHexApi::Provider::remove(ImHexApi::Provider::get()); + ContentRegistry::Provider::getEntries().clear(); + ImHexApi::System::getInitArguments().clear(); ImHexApi::Tasks::getDeferredCalls().clear(); ImHexApi::HexEditor::impl::getBackgroundHighlights().clear(); @@ -227,10 +231,6 @@ namespace hex::init { visualizers.clear(); } - while (ImHexApi::Provider::isValid()) - ImHexApi::Provider::remove(ImHexApi::Provider::get()); - ContentRegistry::Provider::getEntries().clear(); - return true; } diff --git a/plugins/builtin/source/content/views/view_pattern_editor.cpp b/plugins/builtin/source/content/views/view_pattern_editor.cpp index 3b4710773..919e5351e 100644 --- a/plugins/builtin/source/content/views/view_pattern_editor.cpp +++ b/plugins/builtin/source/content/views/view_pattern_editor.cpp @@ -279,8 +279,9 @@ namespace hex::plugin::builtin { EventManager::unsubscribe(this); EventManager::unsubscribe(this); EventManager::unsubscribe(this); - EventManager::unsubscribe(this); EventManager::unsubscribe(this); + EventManager::unsubscribe(this); + EventManager::unsubscribe(this); } void ViewPatternEditor::drawContent() {