From 069f481884de3154b552fc551d21c71ea587d1b9 Mon Sep 17 00:00:00 2001 From: Andrew Kent Date: Fri, 15 Dec 2017 10:08:45 -0800 Subject: [PATCH] Don't inject helpers into the same classloader twice --- .../src/main/java/dd/trace/HelperInjector.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/dd-java-agent/tooling/src/main/java/dd/trace/HelperInjector.java b/dd-java-agent/tooling/src/main/java/dd/trace/HelperInjector.java index dbb55c2152..f89d119e1f 100644 --- a/dd-java-agent/tooling/src/main/java/dd/trace/HelperInjector.java +++ b/dd-java-agent/tooling/src/main/java/dd/trace/HelperInjector.java @@ -18,6 +18,7 @@ import net.bytebuddy.utility.JavaModule; public class HelperInjector implements Transformer { private final Set helperClassNames; private Map helperMap = null; + private final Set injectedClassLoaders = new HashSet(); /** * Construct HelperInjector. @@ -49,11 +50,16 @@ public class HelperInjector implements Transformer { ClassLoader classLoader, JavaModule module) { if (helperClassNames.size() > 0 && classLoader != null) { - try { - new ClassInjector.UsingReflection(classLoader).inject(getHelperMap()); - } catch (ClassNotFoundException cnfe) { - log.error("Failed to inject helper classes into " + classLoader, cnfe); - throw new RuntimeException(cnfe); + synchronized (this) { + if (!injectedClassLoaders.contains(classLoader)) { + try { + new ClassInjector.UsingReflection(classLoader).inject(getHelperMap()); + } catch (ClassNotFoundException cnfe) { + log.error("Failed to inject helper classes into " + classLoader, cnfe); + throw new RuntimeException(cnfe); + } + injectedClassLoaders.add(classLoader); + } } } return builder;