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 {