diff --git a/libraries/ESP8266mDNS/ESP8266mDNS.cpp b/libraries/ESP8266mDNS/ESP8266mDNS.cpp index 6cecae055..883551142 100644 --- a/libraries/ESP8266mDNS/ESP8266mDNS.cpp +++ b/libraries/ESP8266mDNS/ESP8266mDNS.cpp @@ -314,14 +314,7 @@ int MDNSResponder::queryService(char *service, char *proto) { _waitingForAnswers = false; - int numAnswers = 0; - MDNSAnswer *answer = _answers; - while (answer != 0) { - numAnswers++; - answer = answer->next; - } - - return numAnswers; + return _getNumAnswers(); } String MDNSResponder::hostname(int idx) { @@ -359,6 +352,16 @@ MDNSAnswer* MDNSResponder::_getAnswerFromIdx(int idx) { return answer; } +int MDNSResponder::_getNumAnswers() { + int numAnswers = 0; + MDNSAnswer *answer = _answers; + while (answer != 0) { + numAnswers++; + answer = answer->next; + } + return numAnswers; +} + MDNSTxt * MDNSResponder::_getServiceTxt(char *name, char *proto){ MDNSService* servicePtr; for (servicePtr = _services; servicePtr; servicePtr = servicePtr->_next) { @@ -468,18 +471,14 @@ void MDNSResponder::_parsePacket(){ // Clear answer list if (_newQuery) { - answer = _answers; - while (answer != 0) { - while (answer->next != 0) { - answer = answer->next; - } - if (answer == _answers) { - _answers = 0; - } + int numAnswers = _getNumAnswers(); + for (int n = numAnswers - 1; n >= 0; n--) { + answer = _getAnswerFromIdx(n); os_free(answer->hostname); os_free(answer); - answer = _answers; + answer = 0; } + _answers = 0; _newQuery = false; } diff --git a/libraries/ESP8266mDNS/ESP8266mDNS.h b/libraries/ESP8266mDNS/ESP8266mDNS.h index 54ce5e800..7d6cb110f 100644 --- a/libraries/ESP8266mDNS/ESP8266mDNS.h +++ b/libraries/ESP8266mDNS/ESP8266mDNS.h @@ -124,6 +124,7 @@ private: void _reply(uint8_t replyMask, char * service, char *proto, uint16_t port); size_t advertiseServices(); // advertise all hosted services MDNSAnswer* _getAnswerFromIdx(int idx); + int _getNumAnswers(); }; extern MDNSResponder MDNS;