fix: one piece task sometimes backsource after succeed (#1499)

Signed-off-by: bigerous <bigerous@qq.com>
This commit is contained in:
cuidajun 2022-07-28 18:36:52 +08:00 committed by Gaius
parent ebb9296eb9
commit de35b14db9
No known key found for this signature in database
GPG Key ID: 8B4E5D1290FA2FFB
1 changed files with 8 additions and 1 deletions

View File

@ -877,7 +877,11 @@ func (pt *peerTaskConductor) pullPiecesFromPeers(pieceRequestCh chan *DownloadPi
) )
// ensure first peer packet is not nil // ensure first peer packet is not nil
peerPacket := pt.peerPacket.Load().(*scheduler.PeerPacket) peerPacket, ok := pt.peerPacket.Load().(*scheduler.PeerPacket)
if !ok {
pt.Warn("pull pieces canceled")
return
}
if len(peerPacket.CandidatePeers) == 0 { if len(peerPacket.CandidatePeers) == 0 {
num, ok = pt.waitAvailablePeerPacket() num, ok = pt.waitAvailablePeerPacket()
if !ok { if !ok {
@ -999,6 +1003,9 @@ func (pt *peerTaskConductor) initDownloadPieceWorkers(count int32, pieceRequestC
func (pt *peerTaskConductor) waitFirstPeerPacket() (done bool, backSource bool) { func (pt *peerTaskConductor) waitFirstPeerPacket() (done bool, backSource bool) {
// wait first available peer // wait first available peer
select { select {
case <-pt.successCh:
pt.Infof("peer task succeed too fast, no need to wait first peer")
return true, false
case _, ok := <-pt.peerPacketReady: case _, ok := <-pt.peerPacketReady:
if ok { if ok {
// preparePieceTasksByPeer func already send piece result with error // preparePieceTasksByPeer func already send piece result with error