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 1a01047007 Fix NPE in handleMethodException method of
apm-jdk-threadpool-plugin. (#681) (#682)
1a01047007 is described below
commit 1a010470076ba7f206f4fd6559d04136bea73417
Author: ForrestWang123 <157256498+forrestwang...@users.noreply.github.com>
AuthorDate: Fri Apr 19 08:51:09 2024 +0800
Fix NPE in handleMethodException method of apm-jdk-threadpool-plugin.
(#681) (#682)
Co-authored-by: forrestwang
---
.../plugin/AbstractThreadingPoolInterceptor.java | 32 --
1 file changed, 18 insertions(+), 14 deletions(-)
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 c72c1424b5..e11c260f42 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
@@ -28,22 +28,11 @@ import java.lang.reflect.Method;
public abstract class AbstractThreadingPoolInterceptor implements
InstanceMethodsAroundInterceptor {
@Override
public void beforeMethod(EnhancedInstance objInst, Method method, Object[]
allArguments, Class[] argumentsTypes, MethodInterceptResult result) throws
Throwable {
-if (!ContextManager.isActive()) {
-return;
-}
-
-if (allArguments == null || allArguments.length < 1) {
-return;
-}
-
-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) {
+if (notToEnhance(allArguments)) {
return;
}
-Object wrappedObject = wrap(argument);
+Object wrappedObject = wrap(allArguments[0]);
if (wrappedObject != null) {
allArguments[0] = wrappedObject;
}
@@ -63,10 +52,25 @@ public abstract class AbstractThreadingPoolInterceptor
implements InstanceMethod
@Override
public void handleMethodException(EnhancedInstance objInst, Method method,
Object[] allArguments, Class[] argumentsTypes, Throwable t) {
-if (!ContextManager.isActive()) {
+if (notToEnhance(allArguments)) {
return;
}
ContextManager.activeSpan().log(t);
}
+
+private boolean notToEnhance(Object[] allArguments) {
+if (!ContextManager.isActive()) {
+return true;
+}
+
+if (allArguments == null || allArguments.length < 1) {
+return true;
+}
+
+Object argument = allArguments[0];
+
+// Avoid duplicate enhancement, such as the case where it has already
been enhanced by RunnableWrapper or CallableWrapper with toolkit.
+return argument instanceof EnhancedInstance && ((EnhancedInstance)
argument).getSkyWalkingDynamicField() instanceof ContextSnapshot;
+}
}