Skip to content

Commit

Permalink
Load agent classes child first (open-telemetry#5950)
Browse files Browse the repository at this point in the history
  • Loading branch information
laurit authored and RashmiRam committed May 23, 2022
1 parent 14cb1f4 commit d20e0c0
Showing 1 changed file with 19 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,25 @@ public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundExce
throw new ClassNotFoundException(name);
}

return super.loadClass(name, resolve);
synchronized (getClassLoadingLock(name)) {
Class<?> clazz = findLoadedClass(name);
// first search agent classes
if (clazz == null) {
clazz = findAgentClass(name);
}
// search from parent and urls added to this loader
if (clazz == null) {
clazz = super.loadClass(name, false);
}
if (resolve) {
resolveClass(clazz);
}

return clazz;
}
}

@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
private Class<?> findAgentClass(String name) throws ClassNotFoundException {
JarEntry jarEntry = findJarEntry(name.replace('.', '/') + ".class");
if (jarEntry != null) {
byte[] bytes;
Expand All @@ -156,8 +170,7 @@ protected Class<?> findClass(String name) throws ClassNotFoundException {
return defineClass(name, bytes);
}

// find class from agent initializer jar
return super.findClass(name);
return null;
}

public Class<?> defineClass(String name, byte[] bytes) {
Expand Down Expand Up @@ -281,7 +294,7 @@ private URL getJarEntryUrl(JarEntry jarEntry) {
public Enumeration<URL> findResources(String name) throws IOException {
// find resources from agent initializer jar
Enumeration<URL> delegate = super.findResources(name);
// agent jar can have only once resource for given name
// agent jar can have only one resource for given name
URL url = findJarResource(name);
if (url != null) {
return new Enumeration<URL>() {
Expand Down

0 comments on commit d20e0c0

Please sign in to comment.