From 1f85450beeed0696d7f33dd3db821ada3202b721 Mon Sep 17 00:00:00 2001 From: JBD Date: Fri, 20 Apr 2018 14:05:13 -0700 Subject: [PATCH] Don't end execution tracer task if none exists For spans created with NewSpanXXX, we cannot create execution tracer tasks. Don't try to end if none is created. Fixes #717. --- trace/trace.go | 14 ++++++++------ trace/trace_go11.go | 2 +- trace/trace_nongo11.go | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/trace/trace.go b/trace/trace.go index 785699139..19c6930ef 100644 --- a/trace/trace.go +++ b/trace/trace.go @@ -45,7 +45,7 @@ type Span struct { *spanStore endOnce sync.Once - executionTracerSpanEnd func() // ends the execution tracer span + executionTracerTaskEnd func() // ends the execution tracer span } // IsRecordingEvents returns true if events are being recorded for this span. @@ -165,8 +165,8 @@ func StartSpan(ctx context.Context, name string, o ...StartOption) (context.Cont } span := startSpanInternal(name, parent != SpanContext{}, parent, false, opts) - ctx, end := startExecutionTracerSpan(ctx, name) - span.executionTracerSpanEnd = end + ctx, end := startExecutionTracerTask(ctx, name) + span.executionTracerTaskEnd = end return NewContext(ctx, span), span } @@ -180,8 +180,8 @@ func StartSpanWithRemoteParent(ctx context.Context, name string, parent SpanCont op(&opts) } span := startSpanInternal(name, parent != SpanContext{}, parent, true, opts) - ctx, end := startExecutionTracerSpan(ctx, name) - span.executionTracerSpanEnd = end + ctx, end := startExecutionTracerTask(ctx, name) + span.executionTracerTaskEnd = end return NewContext(ctx, span), span } @@ -266,7 +266,9 @@ func (s *Span) End() { return } s.endOnce.Do(func() { - s.executionTracerSpanEnd() + if s.executionTracerTaskEnd != nil { + s.executionTracerTaskEnd() + } // TODO: optimize to avoid this call if sd won't be used. sd := s.makeSpanData() sd.EndTime = internal.MonotonicEndTime(sd.StartTime) diff --git a/trace/trace_go11.go b/trace/trace_go11.go index 2c0996d17..6191c98df 100644 --- a/trace/trace_go11.go +++ b/trace/trace_go11.go @@ -21,6 +21,6 @@ import ( t "runtime/trace" ) -func startExecutionTracerSpan(ctx context.Context, name string) (context.Context, func()) { +func startExecutionTracerTask(ctx context.Context, name string) (context.Context, func()) { return t.NewContext(ctx, name) } diff --git a/trace/trace_nongo11.go b/trace/trace_nongo11.go index 64406e18c..e25419859 100644 --- a/trace/trace_nongo11.go +++ b/trace/trace_nongo11.go @@ -20,6 +20,6 @@ import ( "context" ) -func startExecutionTracerSpan(ctx context.Context, name string) (context.Context, func()) { +func startExecutionTracerTask(ctx context.Context, name string) (context.Context, func()) { return ctx, func() {} }