From 6ecf4fe4b57bacb307fa1a063cff52298c66abf5 Mon Sep 17 00:00:00 2001 From: Yonas Habteab Date: Fri, 25 Feb 2022 15:17:33 +0100 Subject: [PATCH 1/2] ConfigItem: Use atomic variables for notified and commited items count --- lib/config/configitem.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/config/configitem.cpp b/lib/config/configitem.cpp index 6dbb41f59..e3ea72afd 100644 --- a/lib/config/configitem.cpp +++ b/lib/config/configitem.cpp @@ -21,6 +21,7 @@ #include "base/function.hpp" #include "base/utility.hpp" #include +#include #include #include #include @@ -462,7 +463,7 @@ bool ConfigItem::CommitNewItems(const ActivationContext::Ptr& context, WorkQueue if (unresolved_dep) continue; - int committed_items = 0; + std::atomic committed_items(0); upq.ParallelFor(items, [&type, &committed_items](const ItemPair& ip) { const ConfigItem::Ptr& item = ip.first; @@ -514,7 +515,7 @@ bool ConfigItem::CommitNewItems(const ActivationContext::Ptr& context, WorkQueue if (unresolved_dep) continue; - int notified_items = 0; + std::atomic notified_items(0); upq.ParallelFor(items, [&type, ¬ified_items](const ItemPair& ip) { const ConfigItem::Ptr& item = ip.first; From 7f9cbc87079e8a5efc624d7060f33bf8284f57f8 Mon Sep 17 00:00:00 2001 From: Yonas Habteab Date: Fri, 25 Feb 2022 15:18:28 +0100 Subject: [PATCH 2/2] ConfigObject: Initialize local static var at declaration to ensure thread safety --- lib/base/configobject.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/lib/base/configobject.cpp b/lib/base/configobject.cpp index 8d3e07656..e6b260602 100644 --- a/lib/base/configobject.cpp +++ b/lib/base/configobject.cpp @@ -413,13 +413,7 @@ void ConfigObject::OnConfigLoaded() void ConfigObject::OnAllConfigLoaded() { - static ConfigType *ctype; - - if (!ctype) { - Type::Ptr type = Type::GetByName("Zone"); - ctype = dynamic_cast(type.get()); - } - + static ConfigType *ctype = dynamic_cast(Type::GetByName("Zone").get()); String zoneName = GetZoneName(); if (!zoneName.IsEmpty())