You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-08-10 22:31:50 +02:00
Do not inline noopSpan.tracerProvider
(#6456)
Currently, the `noopSpan.tracerProvider` is inlined into `noopSpan.TracerProvider` for binaries built with standard tooling. This function is needed in the ELF file for auto-instrumentation. Ensure this, and the other required methods are always kept isolated. cc @open-telemetry/go-instrumentation-approvers --------- Co-authored-by: Robert Pająk <pellared@hotmail.com>
This commit is contained in:
@@ -22,6 +22,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
### Fixes
|
### Fixes
|
||||||
|
|
||||||
- Stop percent encoding header environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6392)
|
- Stop percent encoding header environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#6392)
|
||||||
|
- Ensure the `noopSpan.tracerProvider` method is not inlined in `go.opentelemetry.io/otel/trace` so the `go.opentelemetry.io/auto` instrumentation can instrument non-recording spans. (#6456)
|
||||||
|
|
||||||
<!-- Released section -->
|
<!-- Released section -->
|
||||||
<!-- Don't change this section unless doing release -->
|
<!-- Don't change this section unless doing release -->
|
||||||
|
@@ -158,6 +158,12 @@ func (t *tracer) Start(ctx context.Context, name string, opts ...trace.SpanStart
|
|||||||
// a nonRecordingSpan by default.
|
// a nonRecordingSpan by default.
|
||||||
var autoInstEnabled = new(bool)
|
var autoInstEnabled = new(bool)
|
||||||
|
|
||||||
|
// newSpan is called by tracer.Start so auto-instrumentation can attach an eBPF
|
||||||
|
// uprobe to this code.
|
||||||
|
//
|
||||||
|
// "noinline" pragma prevents the method from ever being inlined.
|
||||||
|
//
|
||||||
|
//go:noinline
|
||||||
func (t *tracer) newSpan(ctx context.Context, autoSpan *bool, name string, opts []trace.SpanStartOption) (context.Context, trace.Span) {
|
func (t *tracer) newSpan(ctx context.Context, autoSpan *bool, name string, opts []trace.SpanStartOption) (context.Context, trace.Span) {
|
||||||
// autoInstEnabled is passed to newSpan via the autoSpan parameter. This is
|
// autoInstEnabled is passed to newSpan via the autoSpan parameter. This is
|
||||||
// so the auto-instrumentation can define a uprobe for (*t).newSpan and be
|
// so the auto-instrumentation can define a uprobe for (*t).newSpan and be
|
||||||
|
@@ -95,6 +95,8 @@ var autoInstEnabled = new(bool)
|
|||||||
// tracerProvider return a noopTracerProvider if autoEnabled is false,
|
// tracerProvider return a noopTracerProvider if autoEnabled is false,
|
||||||
// otherwise it will return a TracerProvider from the sdk package used in
|
// otherwise it will return a TracerProvider from the sdk package used in
|
||||||
// auto-instrumentation.
|
// auto-instrumentation.
|
||||||
|
//
|
||||||
|
//go:noinline
|
||||||
func (noopSpan) tracerProvider(autoEnabled *bool) TracerProvider {
|
func (noopSpan) tracerProvider(autoEnabled *bool) TracerProvider {
|
||||||
if *autoEnabled {
|
if *autoEnabled {
|
||||||
return newAutoTracerProvider()
|
return newAutoTracerProvider()
|
||||||
|
Reference in New Issue
Block a user