Skip to content

Commit

Permalink
clear out extra dial jobs after dial finishes
Browse files Browse the repository at this point in the history
  • Loading branch information
whyrusleeping committed Jan 3, 2018
1 parent 00ded68 commit 6138f69
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
9 changes: 9 additions & 0 deletions p2p/net/swarm/limiter.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,15 @@ func (dl *dialLimiter) AddDialJob(dj *dialJob) {
go dl.executeDial(dj)
}

func (dl *dialLimiter) clearAllPeerDials(p peer.ID) {
dl.rllock.Lock()
defer dl.rllock.Unlock()
delete(dl.waitingOnPeerLimit, p)
// NB: the waitingOnFd list doesnt need to be cleaned out here, we will
// remove them as we encounter them because they are 'cancelled' at this
// point
}

// executeDial calls the dialFunc, and reports the result through the response
// channel when finished. Once the response is sent it also releases all tokens
// it held during the dial.
Expand Down
2 changes: 2 additions & 0 deletions p2p/net/swarm/swarm_dial.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,8 @@ func (s *Swarm) dialAddrs(ctx context.Context, p peer.ID, remoteAddrs <-chan ma.
defaultDialFail := fmt.Errorf("failed to dial %s (default failure)", p)
exitErr := defaultDialFail

defer s.limiter.clearAllPeerDials(p)

var active int
for {
select {
Expand Down

0 comments on commit 6138f69

Please sign in to comment.