Skip to content

Commit eed890e

Browse files
authored
fix(telemetry): data race on SumReaderCloser (#4076)
Co-authored-by: eliott.bouhana <[email protected]>
1 parent 399a58b commit eed890e

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

internal/telemetry/internal/writer.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"os"
1717
"runtime"
1818
"sync"
19+
"sync/atomic"
1920
"time"
2021

2122
"github.com/DataDog/dd-trace-go/v2/internal"
@@ -239,12 +240,12 @@ func (w *writer) newRequest(endpoint *http.Request, requestType transport.Reques
239240
// SumReaderCloser is a ReadCloser that wraps another ReadCloser and counts the number of bytes read.
240241
type SumReaderCloser struct {
241242
io.ReadCloser
242-
n int
243+
n atomic.Uint64
243244
}
244245

245246
func (s *SumReaderCloser) Read(p []byte) (n int, err error) {
246247
n, err = s.ReadCloser.Read(p)
247-
s.n += n
248+
s.n.Add(uint64(n))
248249
return
249250
}
250251

@@ -293,7 +294,7 @@ func (w *writer) Flush(payload transport.Payload) ([]EndpointRequestResult, erro
293294
}
294295

295296
results = append(results, EndpointRequestResult{
296-
PayloadByteSize: sumReaderCloser.n,
297+
PayloadByteSize: int(sumReaderCloser.n.Load()),
297298
CallDuration: time.Since(now),
298299
StatusCode: response.StatusCode,
299300
})

0 commit comments

Comments
 (0)