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 171ab01ad..4739851f2 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 @@ -109,7 +109,7 @@ public class TraceChannelInterceptor extends AbstractTraceChannelInterceptor { public Message beforeHandle(Message message, MessageChannel channel, MessageHandler handler) { Span spanFromHeader = getSpanFromHeader(message); - if (spanFromHeader!= null) { + if (spanFromHeader != null) { spanFromHeader.logEvent(Span.SERVER_RECV); } getTracer().continueSpan(spanFromHeader); @@ -124,7 +124,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) {