diff --git a/ChangeLog b/ChangeLog index 8bf0a0f9..951368a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -34,6 +34,27 @@ (setGlobalSignalHandler): New function. * src/UrlRequestInfo.cc: setSignalHander -> Util::setGlobalSignalHandler + + Reset peer status in order to exit gracefully: + + * src/PeerAbstractCommand.cc + (execute): Call peer->resetStatus() when btRuntime->isHalt() is true. + + To fix the bug that causes the number of bytes uploaded is not saved + to .aria2 file: + + * src/DefaultPeerStorage.h + (removedPeerSessionDownloadLength): New variable. + (removedPeerSessionUploadLength): New variable. + * src/DefaultPeerStorage.cc + (DefaultPieceStorage): Added removedPeerSessionDownloadLength(0), + removedPeerSessionUploadLength(0). + (calculateStat): Calculate the number of bytes downloaded(uploaded) + through all peers, and then add removedPeerSessionDownloadLength( + removedPeerSessionUploadLength) to it. + (deleteUnusedPeer): Add the number of bytes downloaded(uploaded) from + (to) the peer to removedPeerSessionDownloadLength + (removedPeerSessionUploadLength). 2006-11-09 Tatsuhiro Tsujikawa diff --git a/src/DefaultPeerStorage.cc b/src/DefaultPeerStorage.cc index 456f99f2..52b53a1d 100644 --- a/src/DefaultPeerStorage.cc +++ b/src/DefaultPeerStorage.cc @@ -44,7 +44,9 @@ DefaultPeerStorage::DefaultPeerStorage(BtContextHandle btContext, option(option), maxPeerListSize(MAX_PEER_LIST_SIZE), peerEntryIdCounter(0), - btRuntime(BT_RUNTIME(btContext)) + btRuntime(BT_RUNTIME(btContext)), + removedPeerSessionDownloadLength(0), + removedPeerSessionUploadLength(0) { logger = LogFactory::getInstance(); } @@ -154,9 +156,14 @@ TransferStat DefaultPeerStorage::calculateStat() { PeerHandle& peer = *itr; stat.downloadSpeed += peer->calculateDownloadSpeed(); stat.uploadSpeed += peer->calculateUploadSpeed(); + } + for(Peers::iterator itr = peers.begin(); itr != peers.end(); itr++) { + PeerHandle& peer = *itr; stat.sessionDownloadLength += peer->getSessionDownloadLength(); stat.sessionUploadLength += peer->getSessionUploadLength(); } + stat.sessionDownloadLength += removedPeerSessionDownloadLength; + stat.sessionUploadLength += removedPeerSessionUploadLength; return stat; } @@ -165,6 +172,9 @@ void DefaultPeerStorage::deleteUnusedPeer(int delSize) { itr != peers.end() && delSize > 0;) { const PeerHandle& p = *itr; if(p->cuid == 0) { + // Update removedPeerSession******Length + removedPeerSessionDownloadLength += p->getSessionDownloadLength(); + removedPeerSessionUploadLength += p->getSessionUploadLength(); itr = peers.erase(itr); delSize--; } else { diff --git a/src/DefaultPeerStorage.h b/src/DefaultPeerStorage.h index daabb69d..0bda4187 100644 --- a/src/DefaultPeerStorage.h +++ b/src/DefaultPeerStorage.h @@ -53,6 +53,8 @@ private: int peerEntryIdCounter; Logger* logger; BtRuntimeHandle btRuntime; + long long int removedPeerSessionDownloadLength; + long long int removedPeerSessionUploadLength; public: DefaultPeerStorage(BtContextHandle btContext, const Option* option); virtual ~DefaultPeerStorage(); diff --git a/src/PeerAbstractCommand.cc b/src/PeerAbstractCommand.cc index d3853a97..fec84bf6 100644 --- a/src/PeerAbstractCommand.cc +++ b/src/PeerAbstractCommand.cc @@ -60,6 +60,7 @@ PeerAbstractCommand::~PeerAbstractCommand() { bool PeerAbstractCommand::execute() { if(btRuntime->isHalt()) { + peer->resetStatus(); return true; } try {