This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-java.git


The following commit(s) were added to refs/heads/main by this push:
     new fbabc3d3ab avoid ThreadPoolExecutor duplicate enhancement (#582)
fbabc3d3ab is described below

commit fbabc3d3abdf23597e0e892516cb056e3fc7111f
Author: xiaqi1210 <[email protected]>
AuthorDate: Tue Jul 25 21:50:30 2023 +0800

    avoid ThreadPoolExecutor duplicate enhancement (#582)
    
    Co-authored-by: xiaqi <[email protected]>
---
 CHANGES.md                                                          | 1 +
 .../skywalking/apm/plugin/AbstractThreadingPoolInterceptor.java     | 6 ++++++
 2 files changed, 7 insertions(+)

diff --git a/CHANGES.md b/CHANGES.md
index edd97691d5..a56bff98cd 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -147,6 +147,7 @@ Callable {
 * Support to trace redisson lock
 * Upgrade netty-codec-http2 to 4.1.94.Final
 * Upgrade guava to 32.0.1
+* Fix issue with duplicate enhancement by ThreadPoolExecutor
 
 #### Documentation
 
diff --git 
a/apm-sniffer/bootstrap-plugins/jdk-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/AbstractThreadingPoolInterceptor.java
 
b/apm-sniffer/bootstrap-plugins/jdk-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/AbstractThreadingPoolInterceptor.java
index c130c2f5b4..7239453074 100644
--- 
a/apm-sniffer/bootstrap-plugins/jdk-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/AbstractThreadingPoolInterceptor.java
+++ 
b/apm-sniffer/bootstrap-plugins/jdk-threadpool-plugin/src/main/java/org/apache/skywalking/apm/plugin/AbstractThreadingPoolInterceptor.java
@@ -19,6 +19,7 @@
 package org.apache.skywalking.apm.plugin;
 
 import org.apache.skywalking.apm.agent.core.context.ContextManager;
+import org.apache.skywalking.apm.agent.core.context.ContextSnapshot;
 import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
 import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor;
 import 
org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult;
@@ -37,6 +38,11 @@ public abstract class AbstractThreadingPoolInterceptor 
implements InstanceMethod
 
         Object argument = allArguments[0];
 
+        // Avoid duplicate enhancement, such as the case where it has already 
been enhanced by RunnableWrapper or CallableWrapper with toolkit.
+        if (argument instanceof EnhancedInstance && ((EnhancedInstance) 
argument).getSkyWalkingDynamicField() instanceof ContextSnapshot) {
+            return;
+        }
+
         Object wrappedObject = wrap(argument);
         if (wrappedObject != null) {
             allArguments[0] = wrappedObject;

Reply via email to