From db0500fb2dc7625ae6e388295afa8daa9aa0448c Mon Sep 17 00:00:00 2001 From: Alexey Rybalchenko Date: Fri, 30 Jul 2021 15:52:56 +0200 Subject: [PATCH] Protect access to options container --- fairmq/ProgOptions.cxx | 5 +++++ fairmq/ProgOptions.h | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/fairmq/ProgOptions.cxx b/fairmq/ProgOptions.cxx index 31fd3b59..d3465321 100644 --- a/fairmq/ProgOptions.cxx +++ b/fairmq/ProgOptions.cxx @@ -93,6 +93,7 @@ void ProgOptions::ParseDefaults() return str.c_str(); }); + std::lock_guard lock(fMtx); po::store(po::parse_command_line(argv.size(), const_cast(argv.data()), fAllOptions), fVarMap); } @@ -390,6 +391,8 @@ void ProgOptions::PrintOptions() const int maxLenType = 0; int maxLenDefault = 0; + std::lock_guard lock(fMtx); + for (const auto& m : fVarMap) { maxLenKey = max(maxLenKey, static_cast(m.first.length())); @@ -427,6 +430,8 @@ void ProgOptions::PrintOptions() const void ProgOptions::PrintOptionsRaw() const { + std::lock_guard lock(fMtx); + const vector>& options = fAllOptions.options(); for (const auto& o : options) { diff --git a/fairmq/ProgOptions.h b/fairmq/ProgOptions.h index 14357006..09dd5f6f 100644 --- a/fairmq/ProgOptions.h +++ b/fairmq/ProgOptions.h @@ -226,7 +226,11 @@ class ProgOptions void PrintOptionsRaw() const; /// @brief returns the property container - const boost::program_options::variables_map& GetVarMap() const { return fVarMap; } + const boost::program_options::variables_map& GetVarMap() const + { + std::lock_guard lock(fMtx); + return fVarMap; + } /// @brief Read config property, return default-constructed object if key doesn't exist /// @param key