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;