import (
"bitbucket.org/anacrolix/go.torrent/util"
+ "bitbucket.org/anacrolix/sync"
"github.com/willf/bloom"
"log"
"net"
- "sync"
"time"
)
infoHash string
}
-func (me *peerDiscovery) Close() {
- me.peerStream.Close()
-}
-
func (s *Server) GetPeers(infoHash string) (*peerStream, error) {
s.mu.Lock()
startAddrs := func() (ret []net.Addr) {
}
}
}()
- disc.mu.Lock()
for i, addr := range startAddrs {
if i != 0 {
time.Sleep(time.Millisecond)
}
+ disc.mu.Lock()
disc.contact(addr)
+ disc.mu.Unlock()
}
- disc.mu.Unlock()
return disc.peerStream, nil
}
func (me *peerDiscovery) transactionClosed() {
me.pending--
if me.pending == 0 {
- me.Close()
+ me.close()
return
}
}
select {
case m := <-t.Response:
me.mu.Lock()
- if nodes := m.Nodes(); len(nodes) != 0 {
- for _, n := range nodes {
- me.responseNode(n)
- }
+ for _, n := range m.Nodes() {
+ me.responseNode(n)
}
me.mu.Unlock()
if vs := extractValues(m); vs != nil {
func (ps *peerStream) Close() {
ps.mu.Lock()
defer ps.mu.Unlock()
+ ps.close()
+}
+
+func (ps *peerStream) close() {
select {
case <-ps.stop:
default: