From 2f7f00cc2de00b1ea6278df5fc359d067e89ecbd 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 7c7c6623..bec9042c 100644 --- a/fairmq/ProgOptions.h +++ b/fairmq/ProgOptions.h @@ -224,7 +224,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