]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Increase request update interval if there's no signalling
authorMatt Joiner <anacrolix@gmail.com>
Sun, 1 Aug 2021 12:52:51 +0000 (22:52 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 1 Aug 2021 12:52:51 +0000 (22:52 +1000)
client.go
peerconn.go
requesting.go

index ea8a4803cc5e54a7c5a3127cc6a5c3841f849ca3..26951e4815d9618975b9fec84be1ee89670c28a0 100644 (file)
--- a/client.go
+++ b/client.go
@@ -53,7 +53,7 @@ type Client struct {
 
        _mu    lockWithDeferreds
        event  sync.Cond
-       closed missinggo.Event
+       closed chansync.SetOnce
 
        config *ClientConfig
        logger log.Logger
@@ -398,10 +398,8 @@ func (cl *Client) NewAnacrolixDhtServer(conn net.PacketConn) (s *dht.Server, err
        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)) {
@@ -1518,7 +1516,7 @@ func (cl *Client) clearAcceptLimits() {
 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()
index ac2b0ddfb721cd1426ee64ea4e7d1f8412f9631f..dc9f9efbe3a60a7e6d13bad8fe7e549bc77ca4ed 100644 (file)
@@ -1297,6 +1297,7 @@ func (c *Peer) receiveChunk(msg *pp.Message) error {
        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 {
index f622b0430692987b235a0e0b8fa6bf4eb6c741be..ed1c8d1558346fb139a09fa58ca4317857c1cf96 100644 (file)
@@ -19,15 +19,17 @@ func (cl *Client) requester() {
                        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):
+               }
        }
 }