diff --git a/ChangeLog b/ChangeLog index b1a53f4c..d4c9dd88 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-06-15 Tatsuhiro Tsujikawa + + Fixed assertion error if updateTransferStatFor is called with peer + X before calculateStat() after peer X is added. + * src/DefaultPeerStorage.cc + 2010-06-13 Tatsuhiro Tsujikawa Rewritten DHTMessageCallback using Visitor pattern. Eliminated diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc index 6dc59770..680afb6b 100644 --- a/src/DefaultPeerStorage.cc +++ b/src/DefaultPeerStorage.cc @@ -249,7 +249,9 @@ void DefaultPeerStorage::updateTransferStatFor(const SharedHandle& peer) } std::map::iterator itr = _peerTransferStatMap.find(peer->getID()); - assert(itr != _peerTransferStatMap.end()); + if(itr == _peerTransferStatMap.end()) { + return; + } _cachedTransferStat -= (*itr).second; TransferStat s = calculateStatFor(peer); _cachedTransferStat += s; @@ -259,7 +261,13 @@ void DefaultPeerStorage::updateTransferStatFor(const SharedHandle& peer) TransferStat DefaultPeerStorage::getTransferStatFor (const SharedHandle& peer) { - return _peerTransferStatMap[peer->getID()]; + std::map::const_iterator itr = + _peerTransferStatMap.find(peer->getID()); + if(itr == _peerTransferStatMap.end()) { + return TransferStat(); + } else { + return (*itr).second; + } } void DefaultPeerStorage::deleteUnusedPeer(size_t delSize) {