diff --git a/node/Network.cpp b/node/Network.cpp index 52abbcf9a..ac679e46b 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -993,12 +993,11 @@ uint64_t Network::handleConfigChunk(const Packet &chunk,unsigned int ptr) try { if (nc->fromDictionary(c->data)) { this->_setConfiguration(*nc,true); + delete nc; return configUpdateId; } - delete nc; - } catch ( ... ) { - delete nc; - } + } catch ( ... ) {} + delete nc; } return 0; @@ -1025,25 +1024,31 @@ void Network::requestConfiguration() if (ctrl == RR->identity.address()) { if (RR->localNetworkController) { - NetworkConfig nconf; - switch(RR->localNetworkController->doNetworkConfigRequest(InetAddress(),RR->identity,RR->identity,_id,rmd,nconf)) { - case NetworkController::NETCONF_QUERY_OK: { - Mutex::Lock _l(_lock); - this->_setConfiguration(nconf,true); - } return; - case NetworkController::NETCONF_QUERY_OBJECT_NOT_FOUND: - this->setNotFound(); - return; - case NetworkController::NETCONF_QUERY_ACCESS_DENIED: - this->setAccessDenied(); - return; - default: - return; + NetworkConfig *nconf = new NetworkConfig(); + try { + switch(RR->localNetworkController->doNetworkConfigRequest(InetAddress(),RR->identity,RR->identity,_id,rmd,*nconf)) { + case NetworkController::NETCONF_QUERY_OK: { + Mutex::Lock _l(_lock); + this->_setConfiguration(*nconf,true); + } break; + case NetworkController::NETCONF_QUERY_OBJECT_NOT_FOUND: + this->setNotFound(); + break; + case NetworkController::NETCONF_QUERY_ACCESS_DENIED: + this->setAccessDenied(); + break; + default: + this->setNotFound(); + break; + } + } catch ( ... ) { + this->setNotFound(); } + delete nconf; } else { this->setNotFound(); - return; } + return; } TRACE("requesting netconf for network %.16llx from controller %s",(unsigned long long)_id,ctrl.toString().c_str());