]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fix data race on webseedRequest.next
authorMatt Joiner <anacrolix@gmail.com>
Fri, 23 May 2025 04:40:49 +0000 (14:40 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Fri, 23 May 2025 04:40:49 +0000 (14:40 +1000)
webseed-peer.go

index ccb2fee364b8eb3a0d5039663f8b3dcffef518f2..89e7bf6cdf6c8cdfeaa29b04670478c11c18185f 100644 (file)
@@ -278,7 +278,7 @@ func (ws *webseedPeer) readChunks(wr *webseedRequest) (err error) {
        t := ws.peer.t
        buf := t.getChunkBuffer()
        defer t.putChunkBuffer(buf)
-       for ; wr.next < wr.end; wr.next++ {
+       for wr.next < wr.end {
                reqSpec := t.requestIndexToRequest(wr.next)
                chunkLen := reqSpec.Length.Int()
                buf = buf[:chunkLen]
@@ -297,6 +297,7 @@ func (ws *webseedPeer) readChunks(wr *webseedRequest) (err error) {
                        Index: reqSpec.Index,
                        Begin: reqSpec.Begin,
                })
+               wr.next++
                ws.peer.locker().Unlock()
                if err != nil {
                        err = fmt.Errorf("processing chunk: %w", err)