Based on some observations of lingering goroutines in unit tests.
func (me *Client) Close() {
me.mu.Lock()
defer me.mu.Unlock()
+ select {
+ case <-me.quit:
+ return
+ default:
+ }
close(me.quit)
+ if me.dHT != nil {
+ me.dHT.Close()
+ }
for _, l := range me.listeners {
l.Close()
}
- me.event.Broadcast()
for _, t := range me.torrents {
t.close()
}
+ me.event.Broadcast()
}
var ipv6BlockRange = iplist.Range{Description: "non-IPv4 address"}
return
}
}
+ select {
+ case <-cl.quit:
+ return
+ default:
+ }
cl.event.Wait()
}
}