Bug 406518 - migrate OT/Equinox to the standard OSGi WeavingHook
Trying to fix a potential concurrency bug, I saw hang at
HashMap.getEntry(HashMap.java:446)
HashMap.containsKey(HashMap.java:434)
ClassLoaderRepository.findClass(ClassLoaderRepository.java:71)
DietClassLoaderRepository.loadClass(DietClassLoaderRepository.java:60)
diff --git a/plugins/org.eclipse.objectteams.runtime/src/org/eclipse/objectteams/otre/bcel/DietClassLoaderRepository.java b/plugins/org.eclipse.objectteams.runtime/src/org/eclipse/objectteams/otre/bcel/DietClassLoaderRepository.java
index 3d92bc7..c67b14a 100644
--- a/plugins/org.eclipse.objectteams.runtime/src/org/eclipse/objectteams/otre/bcel/DietClassLoaderRepository.java
+++ b/plugins/org.eclipse.objectteams.runtime/src/org/eclipse/objectteams/otre/bcel/DietClassLoaderRepository.java
@@ -68,7 +68,9 @@
}
DietClassParser parser = new DietClassParser(is, className);
c = parser.parse();
- storeClass(c);
+ synchronized(this) {
+ storeClass(c);
+ }
return c;
} catch (IOException e) {
throw new ClassNotFoundException(e.toString());
@@ -79,7 +81,9 @@
if (c != null) {
if (! (c instanceof DietJavaClass))
return c; // found fully parsed class, OK.
- removeClass(c); // force new loading
+ synchronized(this) {
+ removeClass(c); // force new loading
+ }
}
return super.loadClass(className);
}