Browse Source

2010-06-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Fixed assertion error if updateTransferStatFor is called with peer
	X before calculateStat() after peer X is added.
	* src/DefaultPeerStorage.cc
Tatsuhiro Tsujikawa 15 years ago
parent
commit
98dc02192d
2 changed files with 16 additions and 2 deletions
  1. 6 0
      ChangeLog
  2. 10 2
      src/DefaultPeerStorage.cc

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+2010-06-15  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	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  <t-tujikawa@users.sourceforge.net>
 
 	Rewritten DHTMessageCallback using Visitor pattern. Eliminated

+ 10 - 2
src/DefaultPeerStorage.cc

@@ -249,7 +249,9 @@ void DefaultPeerStorage::updateTransferStatFor(const SharedHandle<Peer>& peer)
   }
   std::map<std::string, TransferStat>::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>& peer)
 TransferStat DefaultPeerStorage::getTransferStatFor
 (const SharedHandle<Peer>& peer)
 {
-  return _peerTransferStatMap[peer->getID()];
+  std::map<std::string, TransferStat>::const_iterator itr =
+    _peerTransferStatMap.find(peer->getID());
+  if(itr == _peerTransferStatMap.end()) {
+    return TransferStat();
+  } else {
+    return (*itr).second;
+  }
 }
 
 void DefaultPeerStorage::deleteUnusedPeer(size_t delSize) {