}
seeder, err := NewClient(cfg)
require.NoError(t, err)
- defer seeder.Close()
if ps.ExportClientStatus {
testutil.ExportStatusWriter(seeder, "s")
}
seederTorrent, _, _ := seeder.AddTorrentSpec(TorrentSpecFromMetaInfo(mi))
+ // Run a Stats right after Closing the Client. This will trigger the Stats
+ // panic in #214 caused by RemoteAddr on Closed uTP sockets.
+ defer seederTorrent.Stats()
+ defer seeder.Close()
seederTorrent.VerifyData()
// Create leecher and a Torrent.
leecherDataDir, err := ioutil.TempDir("", "")
func (t *Torrent) numTotalPeers() int {
peers := make(map[string]struct{})
for conn := range t.conns {
- peers[conn.conn.RemoteAddr().String()] = struct{}{}
+ ra := conn.conn.RemoteAddr()
+ if ra == nil {
+ // It's been closed and doesn't support RemoteAddr.
+ continue
+ }
+ peers[ra.String()] = struct{}{}
}
for addr := range t.halfOpen {
peers[addr] = struct{}{}
if outgoing == lower {
// Close the other one.
c0.Close()
- // Is it safe to delete from the map while we're iterating
- // over it?
+ // TODO: Is it safe to delete from the map while we're
+ // iterating over it?
t.deleteConnection(c0)
} else {
// Abandon this one.