]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2742: Fix AddressSanitizer error
authorvsv <vsv@opencascade.com>
Mon, 19 Nov 2018 10:37:53 +0000 (13:37 +0300)
committervsv <vsv@opencascade.com>
Mon, 19 Nov 2018 10:37:53 +0000 (13:37 +0300)
src/Config/Config_PropManager.cpp
src/Config/Config_PropManager.h

index 4f6530dd38ee216084b6a5e8f87d2b70cb6d22f8..e754039e3a01436c45455057987d3431a17fa962 100644 (file)
@@ -24,7 +24,10 @@ std::vector<int> stringToRGB(const std::string& theColor);
 int stringToInteger(const std::string& theInt);
 bool stringToBoolean(const std::string& theInt);
 
-Config_Properties Config_PropManager::myProps;
+Config_Properties& Config_PropManager::props() {
+  static Config_Properties* confProps = new Config_Properties();
+  return *confProps;
+}
 
 
 Config_Prop* Config_PropManager::registerProp(const std::string& theSection,
@@ -54,7 +57,7 @@ Config_Prop* Config_PropManager::registerProp(const std::string& theSection,
   else {
     aProp =
       new Config_Prop(theSection, theName, theTitle, theType, theDefaultValue, theMin, theMax);
-    myProps.push_back(aProp);
+    props().push_back(aProp);
   }
   return aProp;
 }
@@ -62,7 +65,8 @@ Config_Prop* Config_PropManager::registerProp(const std::string& theSection,
 Config_Prop* Config_PropManager::findProp(const std::string& theSection, const std::string& theName)
 {
   Config_Properties::const_iterator aIt;
-  for (aIt = myProps.cbegin(); aIt != myProps.cend(); ++aIt) {
+  Config_Properties aProps = props();
+  for (aIt = aProps.cbegin(); aIt != aProps.cend(); ++aIt) {
     Config_Prop* aProp = (*aIt);
     if ((aProp->section() == theSection) && (aProp->name() == theName))
       return aProp;
@@ -74,7 +78,8 @@ Config_Properties Config_PropManager::getProperties()
 {
   Config_Properties aRes;
   Config_Properties::const_iterator aIt;
-  for (aIt = myProps.cbegin(); aIt != myProps.cend(); aIt++) {
+  Config_Properties aProps = props();
+  for (aIt = aProps.cbegin(); aIt != aProps.cend(); aIt++) {
     Config_Prop* aProp = (*aIt);
     if (aProp->type() != Config_Prop::Disabled)
       aRes.push_back(aProp);
@@ -87,7 +92,8 @@ std::list<std::string> Config_PropManager::getSections()
   // Return only non disabled sections
   std::list<std::string> aSections;
   Config_Properties::const_iterator aIt;
-  for (aIt = myProps.cbegin(); aIt != myProps.cend(); aIt++) {
+  Config_Properties aProps = props();
+  for (aIt = aProps.cbegin(); aIt != aProps.cend(); aIt++) {
     const Config_Prop* aProp = (*aIt);
     if (aProp->type() != Config_Prop::Disabled)
       aSections.push_back(aProp->section());
@@ -100,7 +106,8 @@ Config_Properties Config_PropManager::getProperties(const std::string& theSectio
 {
   Config_Properties aRes;
   Config_Properties::iterator aIt;
-  for (aIt = myProps.begin(); aIt != myProps.end(); aIt++) {
+  Config_Properties aProps = props();
+  for (aIt = aProps.begin(); aIt != aProps.end(); aIt++) {
     Config_Prop* aProp = (*aIt);
     if ((aProp->section() == theSection) && (aProp->type() != Config_Prop::Disabled))
       aRes.push_back(aProp);
index 00dd75b738ef4162cd9c7ed09df20f9b1e9c34e1..7e03659ad2e6d1423e4416ee7478aef4a1baf123 100644 (file)
@@ -91,7 +91,7 @@ class Config_PropManager
   CONFIG_EXPORT static double stringToDouble(const std::string& theDouble);
 
  private:
-  CONFIG_EXPORT static Config_Properties myProps; ///< List of all stored properties
+  CONFIG_EXPORT static Config_Properties& props(); ///< List of all stored properties
 };
 
 #endif