From ee2d6662e8a5fa8f8c95dcdd94b76dcf3036fbb9 Mon Sep 17 00:00:00 2001 From: Alexey Andronov Date: Tue, 26 Nov 2019 02:13:29 +0700 Subject: [PATCH] src: Fix crash on exit when deleting components (#789) * build: add missing includes in header files * logic: delete components in reverse to creation order --- src/lib/component/ComponentManager.cpp | 14 ++++++++++++-- src/lib/data/graph/Token.h | 1 + .../utility/codeblocks/CodeblocksCompiler.h | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/lib/component/ComponentManager.cpp b/src/lib/component/ComponentManager.cpp index 3ddc8a65..a4728753 100644 --- a/src/lib/component/ComponentManager.cpp +++ b/src/lib/component/ComponentManager.cpp @@ -15,6 +15,16 @@ #include "ViewFactory.h" #include "logging.h" +namespace +{ +template +void reverseErase(Container & container) +{ + while(!container.empty()) + container.pop_back(); +} +} // namespace + ComponentManager::ComponentManager(const ViewFactory* viewFactory, StorageAccess* storageAccess) : m_componentFactory(viewFactory, storageAccess) { @@ -23,8 +33,8 @@ ComponentManager::ComponentManager(const ViewFactory* viewFactory, StorageAccess void ComponentManager::clear() { m_dialogViews.clear(); - m_components.clear(); - m_singleViews.clear(); + reverseErase(m_components); + reverseErase(m_singleViews); } void ComponentManager::setupMain(ViewLayout* viewLayout, Id appId) diff --git a/src/lib/data/graph/Token.h b/src/lib/data/graph/Token.h index 75c2fac2..590fa59c 100644 --- a/src/lib/data/graph/Token.h +++ b/src/lib/data/graph/Token.h @@ -3,6 +3,7 @@ #include #include +#include #include "TokenComponent.h" #include "types.h" diff --git a/src/lib_cxx/utility/codeblocks/CodeblocksCompiler.h b/src/lib_cxx/utility/codeblocks/CodeblocksCompiler.h index 07ce9928..e945b47c 100644 --- a/src/lib_cxx/utility/codeblocks/CodeblocksCompiler.h +++ b/src/lib_cxx/utility/codeblocks/CodeblocksCompiler.h @@ -2,8 +2,8 @@ #define CODEBLOCKS_COMPILER_H #include -#include #include +#include class TiXmlElement;