From: Razvan Becheriu Date: Thu, 14 May 2020 06:37:51 +0000 (+0300) Subject: [#1127] addressed review X-Git-Tag: Kea-1.7.8~94 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b0ac72bc25d139df9caa3181d99538806350acba;p=thirdparty%2Fkea.git [#1127] addressed review --- diff --git a/src/lib/hooks/hooks_manager.cc b/src/lib/hooks/hooks_manager.cc index 5e7d36bff6..31238810e6 100644 --- a/src/lib/hooks/hooks_manager.cc +++ b/src/lib/hooks/hooks_manager.cc @@ -24,9 +24,12 @@ using namespace std; namespace isc { namespace hooks { +boost::shared_ptr HooksManager::shared_callout_manager_; +bool HooksManager::loaded_; + // Constructor -HooksManager::HooksManager() : loaded_(false) { +HooksManager::HooksManager() { init(); } @@ -94,7 +97,7 @@ HooksManager::loadLibrariesInternal(const HookLibsCollection& libraries) { unloadLibrariesInternal(false); // Create the library manager and load the libraries. - lm_collection_.reset(new LibraryManagerCollection(libraries, shared_callout_manager_)); + lm_collection_.reset(new LibraryManagerCollection(libraries)); bool status = lm_collection_->loadLibraries(); if (status) { @@ -178,7 +181,7 @@ HooksManager::init() { // Nothing present, so create the collection with any empty set of // libraries, and get the CalloutManager. HookLibsCollection libraries; - lm_collection_.reset(new LibraryManagerCollection(libraries, shared_callout_manager_)); + lm_collection_.reset(new LibraryManagerCollection(libraries)); lm_collection_->loadLibraries(); callout_manager_ = lm_collection_->getCalloutManager(); } @@ -228,7 +231,7 @@ void HooksManager::setSharedCalloutManager(boost::shared_ptr manager) { shared_callout_manager_ = manager; if (!loaded_) { - init(); + unloadLibraries(); } } diff --git a/src/lib/hooks/hooks_manager.h b/src/lib/hooks/hooks_manager.h index ecb050ca3c..6001278f48 100644 --- a/src/lib/hooks/hooks_manager.h +++ b/src/lib/hooks/hooks_manager.h @@ -229,7 +229,7 @@ public: /// @brief Get the shared callout manager /// /// @return A reference to the shared callout manager - boost::shared_ptr getSharedCalloutManager(); + static boost::shared_ptr getSharedCalloutManager(); /// @brief Set the shared callout manager /// @@ -238,8 +238,8 @@ public: /// not yet been called. /// /// @param manager The shared callout manager - void setSharedCalloutManager(boost::shared_ptr manager = - boost::shared_ptr()); + static void setSharedCalloutManager(boost::shared_ptr manager = + boost::shared_ptr()); /// @brief Park an object (packet). /// @@ -501,10 +501,10 @@ private: boost::shared_ptr callout_manager_; /// Shared callout manager to survive library reloads. - boost::shared_ptr shared_callout_manager_; + static boost::shared_ptr shared_callout_manager_; /// Loaded flag to indicate if @ref loadLibraries has been called - bool loaded_; + static bool loaded_; }; } // namespace util diff --git a/src/lib/hooks/library_manager_collection.cc b/src/lib/hooks/library_manager_collection.cc index 17ee10ad03..a6d65c032c 100644 --- a/src/lib/hooks/library_manager_collection.cc +++ b/src/lib/hooks/library_manager_collection.cc @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -36,9 +37,8 @@ LibraryManagerCollection::getCalloutManager() const { return (callout_manager_); } -LibraryManagerCollection::LibraryManagerCollection(const HookLibsCollection& libraries, - const boost::shared_ptr& manager) - : shared_callout_manager_(manager), library_info_(libraries) { +LibraryManagerCollection::LibraryManagerCollection(const HookLibsCollection& libraries) + : library_info_(libraries) { // We need to split hook libs into library names and library parameters. for (HookLibsCollection::const_iterator it = libraries.begin(); @@ -78,7 +78,7 @@ LibraryManagerCollection::loadLibraries() { // to re-use the existing callout manager (so retaining registered pre- // and post-library callouts). if (library_names_.empty()) { - callout_manager_ = shared_callout_manager_; + callout_manager_ = HooksManager::getSharedCalloutManager(); } if (!library_names_.empty() || !callout_manager_) { callout_manager_.reset(new CalloutManager(library_names_.size())); diff --git a/src/lib/hooks/library_manager_collection.h b/src/lib/hooks/library_manager_collection.h index f1b481b813..df52649ecb 100644 --- a/src/lib/hooks/library_manager_collection.h +++ b/src/lib/hooks/library_manager_collection.h @@ -8,7 +8,6 @@ #define LIBRARY_MANAGER_COLLECTION_H #include -#include #include #include @@ -75,9 +74,7 @@ public: /// @param libraries List of libraries that this collection will manage. /// The order of the libraries is important. It holds the library /// names and its configuration parameters. - LibraryManagerCollection(const HookLibsCollection& libraries, - const boost::shared_ptr& manager = - HooksManager::getHooksManager().getSharedCalloutManager()); + LibraryManagerCollection(const HookLibsCollection& libraries); /// @brief Destructor /// @@ -155,8 +152,6 @@ protected: void unloadLibraries(); private: - /// Shared Callout manager to be associated with the libraries - boost::shared_ptr shared_callout_manager_; /// Vector of library names std::vector library_names_;