#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/db_type.h>
#include <dhcpsrv/host_mgr.h>
+#include <dhcpsrv/lease_mgr_factory.h>
#include <hooks/hooks.h>
#include <hooks/hooks_manager.h>
#include <stats/stats_mgr.h>
ControlledDhcpv4Srv::~ControlledDhcpv4Srv() {
try {
+ LeaseMgrFactory::destroy();
+ HostMgr::create();
cleanup();
// The closure captures either a shared pointer (memory leak)
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/config_backend_dhcp4_mgr.h>
#include <dhcpsrv/db_type.h>
+#include <dhcpsrv/lease_mgr_factory.h>
+#include <dhcpsrv/host_mgr.h>
#include <dhcpsrv/parsers/client_class_def_parser.h>
#include <dhcpsrv/parsers/dhcp_parsers.h>
#include <dhcpsrv/parsers/expiration_config_parser.h>
// Close DHCP sockets and remove any existing timers.
if (!check_only) {
+ // If mysql or postgresql lease and host managers were configured, they
+ // need to be destroy before calling unregisterTimers as they are
+ // responsible for unregistering own connection timers. A memfile lease
+ // manager and an empty host manager will be created instead.
+ auto running_cfg = CfgMgr::instance().getCurrentCfg();
+ auto parameters = DatabaseConnection::parse(running_cfg->getCfgDbAccess()->getLeaseDbAccessString());
+ if (parameters["type"] == "mysql" || parameters["type"] == "postgresql") {
+ CfgDbAccess cfg_db;
+ cfg_db.setAppendedParameters("universe=4");
+ LeaseMgrFactory::create(cfg_db.getLeaseDbAccessString());
+ }
+ HostMgr::create();
IfaceMgr::instance().closeSockets();
TimerMgr::instance()->unregisterTimers();
server.discardPackets();
#include <dhcpsrv/cfg_multi_threading.h>
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/db_type.h>
+#include <dhcpsrv/lease_mgr_factory.h>
#include <dhcpsrv/host_mgr.h>
#include <hooks/hooks.h>
#include <hooks/hooks_manager.h>
ControlledDhcpv6Srv::~ControlledDhcpv6Srv() {
try {
+ LeaseMgrFactory::destroy();
+ HostMgr::create();
cleanup();
// The closure captures either a shared pointer (memory leak)
#include <dhcpsrv/cfg_option.h>
#include <dhcpsrv/cfgmgr.h>
#include <dhcpsrv/db_type.h>
+#include <dhcpsrv/lease_mgr_factory.h>
+#include <dhcpsrv/host_mgr.h>
#include <dhcpsrv/pool.h>
#include <dhcpsrv/subnet.h>
#include <dhcpsrv/timer_mgr.h>
using namespace std;
using namespace isc;
using namespace isc::data;
+using namespace isc::db;
using namespace isc::dhcp;
using namespace isc::asiolink;
using namespace isc::hooks;
// Close DHCP sockets and remove any existing timers.
if (!check_only) {
+ // If mysql or postgresql lease and host managers were configured, they
+ // need to be destroy before calling unregisterTimers as they are
+ // responsible for unregistering own connection timers. A memfile lease
+ // manager and an empty host manager will be created instead.
+ auto running_cfg = CfgMgr::instance().getCurrentCfg();
+ auto parameters = DatabaseConnection::parse(running_cfg->getCfgDbAccess()->getLeaseDbAccessString());
+ if (parameters["type"] == "mysql" || parameters["type"] == "postgresql") {
+ CfgDbAccess cfg_db;
+ cfg_db.setAppendedParameters("universe=6");
+ LeaseMgrFactory::create(cfg_db.getLeaseDbAccessString());
+ }
+ HostMgr::create();
IfaceMgr::instance().closeSockets();
TimerMgr::instance()->unregisterTimers();
server.discardPackets();