diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceRunnable.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceRunnable.java index cbf838713..688269354 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceRunnable.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/TraceRunnable.java @@ -74,6 +74,10 @@ public class TraceRunnable implements Runnable { } protected void close(Span span) { + // race conditions - check #447 + if (!this.tracer.isTracing()) { + this.tracer.continueSpan(span); + } this.tracer.close(span); } @@ -82,7 +86,10 @@ public class TraceRunnable implements Runnable { } protected Span detachSpan(Span span) { - return this.tracer.detach(span); + if (this.tracer.isTracing()) { + return this.tracer.detach(span); + } + return span; } public Tracer getTracer() { diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java index e61ef7b5b..9da6a0cc2 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TraceChannelInterceptor.java @@ -116,7 +116,10 @@ public class TraceChannelInterceptor extends AbstractTraceChannelInterceptor { spanFromHeader.logEvent(Span.SERVER_SEND); addErrorTag(ex); } - getTracer().detach(spanFromHeader); + // related to #447 + if (getTracer().isTracing()) { + getTracer().detach(spanFromHeader); + } } private void addErrorTag(Exception ex) {