You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/06/17 08:34:42 UTC
[skywalking] branch master updated: TracingContext optimize (#2884)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 5358780 TracingContext optimize (#2884)
5358780 is described below
commit 535878054313d94e00f81c6a647bac2f92559207
Author: zhangwei <26...@users.noreply.github.com>
AuthorDate: Mon Jun 17 16:34:35 2019 +0800
TracingContext optimize (#2884)
* TracingContext optimize
* fix checkstyle
---
.../apm/agent/core/context/TracingContext.java | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java
index 7739073..f9b8dd6 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/context/TracingContext.java
@@ -72,9 +72,9 @@ public class TracingContext implements AbstractTracerContext {
/**
* The counter indicates
*/
- private AtomicInteger asyncSpanCounter;
+ private volatile AtomicInteger asyncSpanCounter;
private volatile boolean isRunningInAsyncMode;
- private ReentrantLock asyncFinishLock;
+ private volatile ReentrantLock asyncFinishLock;
/**
* Initialize all fields with default value.
@@ -82,12 +82,8 @@ public class TracingContext implements AbstractTracerContext {
TracingContext() {
this.segment = new TraceSegment();
this.spanIdGenerator = 0;
- if (samplingService == null) {
- samplingService = ServiceManager.INSTANCE.findService(SamplingService.class);
- }
- asyncSpanCounter = new AtomicInteger(0);
+ samplingService = ServiceManager.INSTANCE.findService(SamplingService.class);
isRunningInAsyncMode = false;
- asyncFinishLock = new ReentrantLock();
}
/**
@@ -414,7 +410,15 @@ public class TracingContext implements AbstractTracerContext {
}
@Override public AbstractTracerContext awaitFinishAsync() {
- isRunningInAsyncMode = true;
+ if (!isRunningInAsyncMode) {
+ synchronized (this) {
+ if (!isRunningInAsyncMode) {
+ asyncFinishLock = new ReentrantLock();
+ asyncSpanCounter = new AtomicInteger(0);
+ isRunningInAsyncMode = true;
+ }
+ }
+ }
asyncSpanCounter.addAndGet(1);
return this;
}
@@ -432,7 +436,7 @@ public class TracingContext implements AbstractTracerContext {
asyncFinishLock.lock();
}
try {
- if (activeSpanStack.isEmpty() && asyncSpanCounter.get() == 0) {
+ if (activeSpanStack.isEmpty() && (!isRunningInAsyncMode || asyncSpanCounter.get() == 0)) {
return true;
}
} finally {