From: Thomas Markwalder Date: Wed, 7 Aug 2013 19:15:58 +0000 (-0400) Subject: [master] Corrected valgrind error reported in D2UpdateMgr unit test. X-Git-Tag: bind10-1.2.0beta1-release~286 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=73372e3a10aef030bb33f2834357fe2f4a3bb481;p=thirdparty%2Fkea.git [master] Corrected valgrind error reported in D2UpdateMgr unit test. D2UpdateMgr::checkFinishedTransaction was issuing an invalid read when attempting to prefix increment an iterator used in an std::map erase call. This was flagged by valgrind and also core dumped under FreeBSD10. --- diff --git a/src/bin/d2/d2_update_mgr.cc b/src/bin/d2/d2_update_mgr.cc index d826649aa9..e625c3e584 100644 --- a/src/bin/d2/d2_update_mgr.cc +++ b/src/bin/d2/d2_update_mgr.cc @@ -74,21 +74,24 @@ D2UpdateMgr::checkFinishedTransactions() { // for finished transactions. // At the moment all we do is remove them from the list. This is likely // to expand as DHCP_DDNS matures. + // NOTE: One must use postfix increments of the iterator on the calls + // to erase. This replaces the old iterator which becomes invalid by the + // erase with a the next valid iterator. Prefix incrementing will not + // work. TransactionList::iterator it = transaction_list_.begin(); while (it != transaction_list_.end()) { NameChangeTransactionPtr trans = (*it).second; switch (trans->getNcrStatus()) { case dhcp_ddns::ST_COMPLETED: - transaction_list_.erase(it); + transaction_list_.erase(it++); break; case dhcp_ddns::ST_FAILED: - transaction_list_.erase(it); + transaction_list_.erase(it++); break; default: + ++it; break; } - - ++it; } }