From: Razvan Becheriu Date: Thu, 19 Nov 2020 13:27:22 +0000 (+0200) Subject: [#1550] addressed comments X-Git-Tag: Kea-1.9.2~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6ce3a310714595c052ebbcf3a40cb2cdd51edb44;p=thirdparty%2Fkea.git [#1550] addressed comments --- diff --git a/src/lib/dhcpsrv/alloc_engine.cc b/src/lib/dhcpsrv/alloc_engine.cc index e589b3d449..012a24deb8 100644 --- a/src/lib/dhcpsrv/alloc_engine.cc +++ b/src/lib/dhcpsrv/alloc_engine.cc @@ -597,16 +597,17 @@ AllocEngine::findReservation(ClientContext6& ctx) { SharedNetwork6Ptr network; subnet->getSharedNetwork(network); - if (ctx.hosts_.find(SUBNET_ID_GLOBAL) == ctx.hosts_.end() && - subnet->getReservationsGlobal()) { - // setting null host means there is no host and no need to perform the - // search again - ctx.hosts_[SUBNET_ID_GLOBAL] = findGlobalReservation(ctx); - } - - // If only global reservations are enabled all work is done. - if (!subnet->getReservationsInSubnet()) { - return; + // @todo: This code can be trivially optimized. + if (subnet->getReservationsGlobal()) { + ConstHostPtr ghost = findGlobalReservation(ctx); + if (ghost) { + ctx.hosts_[SUBNET_ID_GLOBAL] = ghost; + + // If we had only to fetch global reservations it is done. + if (!subnet->getReservationsInSubnet()) { + return; + } + } } // If the subnet belongs to a shared network it is usually going to be @@ -3344,16 +3345,17 @@ AllocEngine::findReservation(ClientContext4& ctx) { SharedNetwork4Ptr network; subnet->getSharedNetwork(network); - if (ctx.hosts_.find(SUBNET_ID_GLOBAL) == ctx.hosts_.end() && - subnet->getReservationsGlobal()) { - // setting null host means there is no host and no need to perform the - // search again - ctx.hosts_[SUBNET_ID_GLOBAL] = findGlobalReservation(ctx); - } + // @todo: This code can be trivially optimized. + if (subnet->getReservationsGlobal()) { + ConstHostPtr ghost = findGlobalReservation(ctx); + if (ghost) { + ctx.hosts_[SUBNET_ID_GLOBAL] = ghost; - // If only global reservations are enabled all work is done. - if (!subnet->getReservationsInSubnet()) { - return; + // If we had only to fetch global reservations it is done. + if (!subnet->getReservationsInSubnet()) { + return; + } + } } // If the subnet belongs to a shared network it is usually going to be