dd-trace-go icon indicating copy to clipboard operation
dd-trace-go copied to clipboard

ddtrace/tracer: DATA RACE for span Resource `s.Resource`

Open nyadav810 opened this issue 3 years ago • 2 comments

I have observed a data race in the tracer library, between applyPPROFLabels and setMeta (which is marked not safe for concurrent use):

  • Read: https://github.com/DataDog/dd-trace-go/blob/main/ddtrace/tracer/tracer.go#L523
  • Write: https://github.com/DataDog/dd-trace-go/blob/main/ddtrace/tracer/span.go#L316

Proposed solution:

  1. RLock localRootSpan after line 518
  2. RUnlock localRootSpan after line 524

nyadav810 avatar Sep 20 '22 19:09 nyadav810

Thanks for the report and sorry for the delayed response. I'll investigate. If you have more information on how to reproduce this, please share. I assume you used the -race detector against your test suite?

felixge avatar Sep 26 '22 07:09 felixge

Ok, my initial attempts to reproduce this by running the related package tests under the -race flag have no yielded any race detector complaints.

I'm leaving this open for now, but will need some more details on how to reproduce this in order to provide a solution.

$ go test -race ./ddtrace/... ./internal/... ./profiler...
ok  	gopkg.in/DataDog/dd-trace-go.v1/ddtrace	0.255s [no tests to run]
ok  	gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext	0.080s
ok  	gopkg.in/DataDog/dd-trace-go.v1/ddtrace/internal	0.082s
ok  	gopkg.in/DataDog/dd-trace-go.v1/ddtrace/mocktracer	0.280s
ok  	gopkg.in/DataDog/dd-trace-go.v1/ddtrace/opentracer	0.425s
# gopkg.in/DataDog/dd-trace-go.v1/profiler/internal/cmemprof.test
ld: warning: -no_pie is deprecated when targeting new OS versions
ok  	gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer	28.441s
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal	0.343s
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec	0.488s
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/dyngo	1.241s
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/dyngo/instrumentation	[no test files]
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/dyngo/instrumentation/grpcsec	0.135s
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/dyngo/instrumentation/httpsec	0.174s
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/waf	0.103s
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/waf/include	[no test files]
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/waf/lib/darwin-amd64	[no test files]
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/waf/lib/linux-amd64	[no test files]
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/globalconfig	[no test files]
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/log	0.130s
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/osinfo	[no test files]
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/samplernames	[no test files]
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/telemetry	1.480s
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/traceprof	[no test files]
?   	gopkg.in/DataDog/dd-trace-go.v1/internal/traceprof/testapp	[no test files]
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/traceprof/traceproftest	5.007s
ok  	gopkg.in/DataDog/dd-trace-go.v1/internal/version	0.226s
ok  	gopkg.in/DataDog/dd-trace-go.v1/profiler	8.564s
ok  	gopkg.in/DataDog/dd-trace-go.v1/profiler/internal/cmemprof	0.097s
?   	gopkg.in/DataDog/dd-trace-go.v1/profiler/internal/cmemprof/testallocator	[no test files]
?   	gopkg.in/DataDog/dd-trace-go.v1/profiler/internal/extensions	[no test files]
ok  	gopkg.in/DataDog/dd-trace-go.v1/profiler/internal/immutable	0.113s
ok  	gopkg.in/DataDog/dd-trace-go.v1/profiler/internal/pprofutils	0.105s

felixge avatar Sep 26 '22 08:09 felixge