_mu lockWithDeferreds
event sync.Cond
- closed missinggo.Event
+ closed chansync.SetOnce
config *ClientConfig
logger log.Logger
return
}
-func (cl *Client) Closed() <-chan struct{} {
- cl.lock()
- defer cl.unlock()
- return cl.closed.C()
+func (cl *Client) Closed() chansync.Done {
+ return cl.closed.Done()
}
func (cl *Client) eachDhtServer(f func(DhtServer)) {
func (cl *Client) acceptLimitClearer() {
for {
select {
- case <-cl.closed.LockedChan(cl.locker()):
+ case <-cl.closed.Done():
return
case <-time.After(15 * time.Minute):
cl.lock()
c.allStats(add(int64(len(msg.Piece)), func(cs *ConnStats) *Count { return &cs.BytesReadUsefulData }))
if deletedRequest {
c.piecesReceivedSinceLastRequestUpdate++
+ c.updateRequests()
c.allStats(add(int64(len(msg.Piece)), func(cs *ConnStats) *Count { return &cs.BytesReadUsefulIntendedData }))
}
for _, f := range c.t.cl.config.Callbacks.ReceivedUsefulData {
cl.doRequests()
return cl.updateRequests.Signaled()
}()
- // We can probably tune how often to heed this signal. TODO: Currently disabled to retain
- // existing behaviour, while the signalling is worked out.
- update = nil
select {
- case <-cl.closed.LockedChan(cl.locker()):
+ case <-cl.closed.Done():
return
- case <-update:
case <-time.After(100 * time.Millisecond):
}
+ select {
+ case <-cl.closed.Done():
+ return
+ case <-update:
+ case <-time.After(time.Second):
+ }
}
}