Commit a09bee9b authored by Razvan Becheriu's avatar Razvan Becheriu

[#889,!591] lock only in MT mode

parent 1b27c56f
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <dhcp/docsis3_option_defs.h> #include <dhcp/docsis3_option_defs.h>
#include <exceptions/exceptions.h> #include <exceptions/exceptions.h>
#include <util/buffer.h> #include <util/buffer.h>
#include <util/multi_threading_mgr.h>
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include <boost/shared_array.hpp> #include <boost/shared_array.hpp>
...@@ -89,7 +90,16 @@ void initOptionSpace(OptionDefContainerPtr& defs, ...@@ -89,7 +90,16 @@ void initOptionSpace(OptionDefContainerPtr& defs,
const OptionDefContainerPtr& const OptionDefContainerPtr&
LibDHCP::getOptionDefs(const std::string& space) { LibDHCP::getOptionDefs(const std::string& space) {
static mutex local_mutex; static mutex local_mutex;
std::lock_guard<std::mutex> lock(local_mutex); if (MultiThreadingMgr::instance().getMode()) {
std::lock_guard<std::mutex> lock(local_mutex);
return LibDHCP::getOptionDefs(space);
} else {
return LibDHCP::getOptionDefs(space);
}
}
const OptionDefContainerPtr&
LibDHCP::getOptionDefsInternal(const std::string& space) {
// If any of the containers is not initialized, it means that we haven't // If any of the containers is not initialized, it means that we haven't
// initialized option definitions at all. // initialized option definitions at all.
if (option_defs_.end() == option_defs_.find(space)) { if (option_defs_.end() == option_defs_.find(space)) {
......
...@@ -366,6 +366,16 @@ public: ...@@ -366,6 +366,16 @@ public:
static uint32_t optionSpaceToVendorId(const std::string& option_space); static uint32_t optionSpaceToVendorId(const std::string& option_space);
private: private:
/// @brief Returns collection of option definitions.
///
/// This method returns a collection of option definitions for a specified
/// option space. It must be called in a thread safe scope when MT is enabled.
///
/// @param space Option space.
///
/// @return Pointer to a collection of option definitions.
static const OptionDefContainerPtr& getOptionDefsInternal(const std::string& space);
/// Initialize DHCP option definitions. /// Initialize DHCP option definitions.
/// ///
/// The method creates option definitions for all DHCP options. /// The method creates option definitions for all DHCP options.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment