From: Matt Joiner Date: Sun, 7 Dec 2014 03:22:12 +0000 (-0600) Subject: dht: Tidy up GetPeers() X-Git-Tag: v1.0.0~1407 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=c6d41cf0274f70ddefab466975fee3c9e14580b3;p=btrtrc.git dht: Tidy up GetPeers() --- diff --git a/dht/getpeers.go b/dht/getpeers.go index 1f136c9c..8277a5c1 100644 --- a/dht/getpeers.go +++ b/dht/getpeers.go @@ -4,6 +4,7 @@ import ( "log" "net" "sync" + "time" "bitbucket.org/anacrolix/go.torrent/util" ) @@ -24,18 +25,6 @@ func (me *peerDiscovery) Close() { } func (s *Server) GetPeers(infoHash string) (*peerStream, error) { - disc := &peerDiscovery{ - peerStream: &peerStream{ - Values: make(chan peerStreamValue), - stop: make(chan struct{}), - }, - triedAddrs: make(map[string]struct{}, 500), - contactAddrs: make(chan net.Addr), - transactionClosed: make(chan struct{}), - server: s, - infoHash: infoHash, - } - go disc.loop() s.mu.Lock() startAddrs := func() (ret []net.Addr) { for _, n := range s.closestGoodNodes(160, infoHash) { @@ -44,15 +33,29 @@ func (s *Server) GetPeers(infoHash string) (*peerStream, error) { return }() s.mu.Unlock() - for _, addr := range startAddrs { - disc.contact(addr) - } if len(startAddrs) == 0 { addr, err := bootstrapAddr() if err != nil { - disc.Close() return nil, err } + startAddrs = append(startAddrs, addr) + } + disc := &peerDiscovery{ + peerStream: &peerStream{ + Values: make(chan peerStreamValue), + stop: make(chan struct{}), + }, + triedAddrs: make(map[string]struct{}, 500), + contactAddrs: make(chan net.Addr), + transactionClosed: make(chan struct{}), + server: s, + infoHash: infoHash, + } + go disc.loop() + for i, addr := range startAddrs { + if i != 0 { + time.Sleep(time.Microsecond) + } disc.contact(addr) } return disc.peerStream, nil