@@ -74,6 +74,7 @@ void SonicDBConfig::initializeGlobalConfig(const string &file)
74
74
std::unordered_map<std::string, SonicDBInfo> db_entry;
75
75
std::unordered_map<std::string, RedisInstInfo> inst_entry;
76
76
std::unordered_map<int , std::string> separator_entry;
77
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
77
78
78
79
SWSS_LOG_ENTER ();
79
80
@@ -155,6 +156,7 @@ void SonicDBConfig::initializeGlobalConfig(const string &file)
155
156
SWSS_LOG_ERROR (" Sonic database config global file doesn't exist at %s\n " , file.c_str ());
156
157
}
157
158
159
+
158
160
// Set it as the global config file is already parsed and init done.
159
161
m_global_init = true ;
160
162
}
@@ -164,6 +166,7 @@ void SonicDBConfig::initialize(const string &file)
164
166
std::unordered_map<std::string, SonicDBInfo> db_entry;
165
167
std::unordered_map<std::string, RedisInstInfo> inst_entry;
166
168
std::unordered_map<int , std::string> separator_entry;
169
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
167
170
168
171
SWSS_LOG_ENTER ();
169
172
@@ -184,6 +187,8 @@ void SonicDBConfig::initialize(const string &file)
184
187
185
188
void SonicDBConfig::validateNamespace (const string &netns)
186
189
{
190
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
191
+
187
192
SWSS_LOG_ENTER ();
188
193
189
194
// With valid namespace input and database_global.json is not loaded, ask user to initializeGlobalConfig first
@@ -206,6 +211,8 @@ void SonicDBConfig::validateNamespace(const string &netns)
206
211
207
212
SonicDBInfo& SonicDBConfig::getDbInfo (const std::string &dbName, const std::string &netns)
208
213
{
214
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
215
+
209
216
SWSS_LOG_ENTER ();
210
217
211
218
if (!m_init)
@@ -238,6 +245,8 @@ SonicDBInfo& SonicDBConfig::getDbInfo(const std::string &dbName, const std::stri
238
245
239
246
RedisInstInfo& SonicDBConfig::getRedisInfo (const std::string &dbName, const std::string &netns)
240
247
{
248
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
249
+
241
250
SWSS_LOG_ENTER ();
242
251
243
252
if (!m_init)
@@ -285,6 +294,8 @@ string SonicDBConfig::getSeparator(const string &dbName, const string &netns)
285
294
286
295
string SonicDBConfig::getSeparator (int dbId, const string &netns)
287
296
{
297
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
298
+
288
299
if (!m_init)
289
300
initialize (DEFAULT_SONIC_DB_CONFIG_FILE);
290
301
@@ -350,6 +361,7 @@ int SonicDBConfig::getDbPort(const string &dbName, const string &netns)
350
361
vector<string> SonicDBConfig::getNamespaces ()
351
362
{
352
363
vector<string> list;
364
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
353
365
354
366
if (!m_global_init)
355
367
initializeGlobalConfig ();
@@ -365,6 +377,7 @@ vector<string> SonicDBConfig::getNamespaces()
365
377
366
378
std::vector<std::string> SonicDBConfig::getDbList (const std::string &netns)
367
379
{
380
+ std::lock_guard<std::recursive_mutex> guard (m_db_info_mutex);
368
381
if (!m_init)
369
382
{
370
383
initialize ();
@@ -381,6 +394,7 @@ std::vector<std::string> SonicDBConfig::getDbList(const std::string &netns)
381
394
382
395
constexpr const char *SonicDBConfig::DEFAULT_SONIC_DB_CONFIG_FILE;
383
396
constexpr const char *SonicDBConfig::DEFAULT_SONIC_DB_GLOBAL_CONFIG_FILE;
397
+ std::recursive_mutex SonicDBConfig::m_db_info_mutex;
384
398
unordered_map<string, unordered_map<string, RedisInstInfo>> SonicDBConfig::m_inst_info;
385
399
unordered_map<string, unordered_map<string, SonicDBInfo>> SonicDBConfig::m_db_info;
386
400
unordered_map<string, unordered_map<int , string>> SonicDBConfig::m_db_separator;
0 commit comments