client.go | 9 +-------- go.mod | 4 ++-- go.sum | 4 ++-- ratelimitreader.go | 6 +++--- diff --git a/client.go b/client.go index 9e0c92743cb77b72d1b787725233057c11ba8465..fd27f9abf270fd7f8697ede9e420c8064ef9b888 100644 --- a/client.go +++ b/client.go @@ -1774,14 +1774,7 @@ return } func (cl *Client) newDownloadRateLimitedReader(r io.Reader) io.Reader { - if cl.config.DownloadRateLimiter == nil { - return r - } - // Why if the limit is Inf? Because it can be dynamically adjusted. - return rateLimitedReader{ - l: cl.config.DownloadRateLimiter, - r: r, - } + return newRateLimitedReader(r, cl.config.DownloadRateLimiter) } func (cl *Client) onDHTAnnouncePeer(ih metainfo.Hash, ip net.IP, port int, portOk bool) { diff --git a/go.mod b/go.mod index f77855c390d158532edda633e20d9063a4c44455..c1471730e81f06e0fc6470a60f0c81658f6f989c 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/anacrolix/torrent -go 1.24 +go 1.24.0 require ( github.com/RoaringBitmap/roaring v1.2.3 @@ -55,7 +55,7 @@ golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 golang.org/x/net v0.42.0 golang.org/x/sync v0.16.0 golang.org/x/sys v0.34.0 - golang.org/x/time v0.0.0-20220609170525-579cf78fd858 + golang.org/x/time v0.14.0 ) require ( diff --git a/go.sum b/go.sum index e676a0b7df69e885777e7eea9ca027d300040ef9..4cac690b428354a39ff64d43a5ac1acaf2a8e808 100644 --- a/go.sum +++ b/go.sum @@ -789,8 +789,8 @@ golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= +golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/ratelimitreader.go b/ratelimitreader.go index 39df9326283f7d19c5a5843b494a1f17a2dc7666..0a6468ceab4cefc6340aad260edff27822c38ab3 100644 --- a/ratelimitreader.go +++ b/ratelimitreader.go @@ -33,10 +33,10 @@ // If the burst is zero, let the limiter method handle errors. if me.l.Burst() != 0 { b = b[:min(len(b), me.l.Burst())] } - t := time.Now() n, err = me.r.Read(b) - r := me.l.ReserveN(t, n) + // golang.org/x/time/rate is completely fucking busted. TODO: Write my own rate limiter. + r := me.l.ReserveN(time.Now(), n) panicif.False(r.OK()) - time.Sleep(r.DelayFrom(t)) + time.Sleep(r.Delay()) return }