From: Matt Joiner Date: Thu, 10 Jul 2025 06:32:02 +0000 (+1000) Subject: Fix benign race on webseed cancellation flag X-Git-Tag: v1.59.0~39 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=855ebc24276fe012ac65b4d1cfa892d6d51d016f;p=btrtrc.git Fix benign race on webseed cancellation flag --- diff --git a/webseed-peer.go b/webseed-peer.go index 45b8c9be..80479e3b 100644 --- a/webseed-peer.go +++ b/webseed-peer.go @@ -135,7 +135,7 @@ func (ws *webseedPeer) runRequest(webseedRequest *webseedRequest) { webseedRequest.Close() if err != nil { level := slog.LevelInfo - if webseedRequest.cancelled { + if webseedRequest.cancelled.Load() { level = slog.LevelDebug } ws.slogger().Log(context.TODO(), level, "webseed request error", "err", err) diff --git a/webseed-request.go b/webseed-request.go index 51f76199..7e79f127 100644 --- a/webseed-request.go +++ b/webseed-request.go @@ -2,6 +2,7 @@ package torrent import ( "fmt" + "sync/atomic" "github.com/anacrolix/torrent/webseed" ) @@ -16,7 +17,7 @@ type webseedRequest struct { next RequestIndex // One greater than the end of the range. end RequestIndex - cancelled bool + cancelled atomic.Bool } func (me *webseedRequest) Close() { @@ -26,8 +27,7 @@ func (me *webseedRequest) Close() { // Record that it was exceptionally cancelled. func (me *webseedRequest) Cancel() { me.request.Cancel() - if !me.cancelled { - me.cancelled = true + if !me.cancelled.Swap(true) { if webseed.PrintDebug { fmt.Printf("cancelled webseed request\n") }