namespace isc {
namespace hooks {
+boost::shared_ptr<CalloutManager> HooksManager::shared_callout_manager_;
+bool HooksManager::loaded_;
+
// Constructor
-HooksManager::HooksManager() : loaded_(false) {
+HooksManager::HooksManager() {
init();
}
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) {
// 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();
}
HooksManager::setSharedCalloutManager(boost::shared_ptr<CalloutManager> manager) {
shared_callout_manager_ = manager;
if (!loaded_) {
- init();
+ unloadLibraries();
}
}
/// @brief Get the shared callout manager
///
/// @return A reference to the shared callout manager
- boost::shared_ptr<CalloutManager> getSharedCalloutManager();
+ static boost::shared_ptr<CalloutManager> getSharedCalloutManager();
/// @brief Set the shared callout manager
///
/// not yet been called.
///
/// @param manager The shared callout manager
- void setSharedCalloutManager(boost::shared_ptr<CalloutManager> manager =
- boost::shared_ptr<CalloutManager>());
+ static void setSharedCalloutManager(boost::shared_ptr<CalloutManager> manager =
+ boost::shared_ptr<CalloutManager>());
/// @brief Park an object (packet).
///
boost::shared_ptr<CalloutManager> callout_manager_;
/// Shared callout manager to survive library reloads.
- boost::shared_ptr<CalloutManager> shared_callout_manager_;
+ static boost::shared_ptr<CalloutManager> shared_callout_manager_;
/// Loaded flag to indicate if @ref loadLibraries has been called
- bool loaded_;
+ static bool loaded_;
};
} // namespace util
#include <config.h>
#include <hooks/callout_manager.h>
+#include <hooks/hooks_manager.h>
#include <hooks/library_manager.h>
#include <hooks/library_manager_collection.h>
return (callout_manager_);
}
-LibraryManagerCollection::LibraryManagerCollection(const HookLibsCollection& libraries,
- const boost::shared_ptr<CalloutManager>& 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();
// 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()));
#define LIBRARY_MANAGER_COLLECTION_H
#include <exceptions/exceptions.h>
-#include <hooks/hooks_manager.h>
#include <boost/shared_ptr.hpp>
#include <hooks/libinfo.h>
/// @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<CalloutManager>& manager =
- HooksManager::getHooksManager().getSharedCalloutManager());
+ LibraryManagerCollection(const HookLibsCollection& libraries);
/// @brief Destructor
///
void unloadLibraries();
private:
- /// Shared Callout manager to be associated with the libraries
- boost::shared_ptr<CalloutManager> shared_callout_manager_;
/// Vector of library names
std::vector<std::string> library_names_;