Fix warning "Cannot fid peer ... in usedPeers_"

pull/704/head
Tatsuhiro Tsujikawa 2016-07-03 05:26:41 +09:00
parent f7cbbfd209
commit 4df7b540a2
5 changed files with 27 additions and 2 deletions

View File

@ -160,6 +160,16 @@ void DefaultPeerStorage::addPeer(
static_cast<unsigned long>(unusedPeers_.size())));
}
std::shared_ptr<Peer>
DefaultPeerStorage::addAndCheckoutPeer(const std::shared_ptr<Peer>& peer,
cuid_t cuid)
{
unusedPeers_.push_front(peer);
addUniqPeer(peer);
return checkoutPeer(cuid);
}
void DefaultPeerStorage::addDroppedPeer(const std::shared_ptr<Peer>& peer)
{
// Make sure that no duplicated peer exists in droppedPeers_. If

View File

@ -94,6 +94,9 @@ public:
virtual void
addPeer(const std::vector<std::shared_ptr<Peer>>& peers) CXX11_OVERRIDE;
std::shared_ptr<Peer> addAndCheckoutPeer(const std::shared_ptr<Peer>& peer,
cuid_t cuid);
const std::deque<std::shared_ptr<Peer>>& getUnusedPeers();
virtual const PeerSet& getUsedPeers() CXX11_OVERRIDE;

View File

@ -136,8 +136,7 @@ bool PeerReceiveHandshakeCommand::executeInternal()
btRuntime->lessThanMaxPeers()) {
// TODO addPeer and checkoutPeer must be "atomic", in a sense
// that the added peer must be checked out.
if (peerStorage->addPeer(getPeer()) &&
peerStorage->checkoutPeer(getCuid())) {
if (peerStorage->addAndCheckoutPeer(getPeer(), getCuid())) {
getDownloadEngine()->addCommand(make_unique<PeerInteractionCommand>(
getCuid(), downloadContext->getOwnerRequestGroup(), getPeer(),
getDownloadEngine(), btRuntime, pieceStorage, peerStorage,

View File

@ -67,6 +67,12 @@ public:
*/
virtual void addPeer(const std::vector<std::shared_ptr<Peer>>& peers) = 0;
/**
* Adds new peer, and checkout it atomically.
*/
virtual std::shared_ptr<Peer>
addAndCheckoutPeer(const std::shared_ptr<Peer>& peer, cuid_t cuid) = 0;
/**
* Returns the number of peers, including used and unused ones.
*/

View File

@ -38,6 +38,13 @@ public:
return unusedPeers;
}
virtual std::shared_ptr<Peer>
addAndCheckoutPeer(const std::shared_ptr<Peer>& peer, cuid_t cuid)
{
unusedPeers.push_back(peer);
return nullptr;
}
virtual size_t countAllPeer() const CXX11_OVERRIDE
{
return unusedPeers.size() + usedPeers.size();