diff options
author | Jan Christopher Vogt <oss.nsp@cvogt.org> | 2017-02-13 09:08:58 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-13 09:08:58 -0500 |
commit | ae435591ce164a8bb4c836fec446adebc7f14a4a (patch) | |
tree | 3a9d28a4fb052bcb3127c75021671b7bf52382fd | |
parent | b26114e16e7654f34f4e07be25aaad9839ef81a4 (diff) | |
parent | 2cc6249da16a6b0ab8a7d7620ebd9738c9b366c5 (diff) | |
download | cbt-ae435591ce164a8bb4c836fec446adebc7f14a4a.tar.gz cbt-ae435591ce164a8bb4c836fec446adebc7f14a4a.tar.bz2 cbt-ae435591ce164a8bb4c836fec446adebc7f14a4a.zip |
Merge pull request #344 from cvogt/fix-deadlock
Fix deadlock
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | nailgun_launcher/CbtURLClassLoader.java | 14 |
2 files changed, 11 insertions, 4 deletions
@@ -12,3 +12,4 @@ realpath/realpath node_modules *fastopt* *fullopt* +examples/dotty-example/_site diff --git a/nailgun_launcher/CbtURLClassLoader.java b/nailgun_launcher/CbtURLClassLoader.java index bf698b0..10add77 100644 --- a/nailgun_launcher/CbtURLClassLoader.java +++ b/nailgun_launcher/CbtURLClassLoader.java @@ -15,7 +15,7 @@ public class CbtURLClassLoader extends java.net.URLClassLoader{ + "\n)" ); } - ConcurrentHashMap<String,Class> cache = new ConcurrentHashMap<String,Class>(); + ConcurrentHashMap<Object,Object> cache = new ConcurrentHashMap<Object,Object>(); public Class loadClass(String name) throws ClassNotFoundException{ Class _class = super.loadClass(name); if(_class == null) throw new ClassNotFoundException(name); @@ -25,12 +25,18 @@ public class CbtURLClassLoader extends java.net.URLClassLoader{ //System.out.println("loadClass("+name+") on \n"+this); synchronized( cache ){ if(!cache.containsKey(name)) + cache.put(name, new Object()); + } + Object key = cache.get(name); + synchronized( key ){ + if(!cache.containsKey(key)){ try{ - cache.put(name, super.loadClass(name, resolve)); + cache.put(key, super.loadClass(name, resolve)); } catch (ClassNotFoundException e){ - cache.put(name, Object.class); + cache.put(key, Object.class); } - Class _class = cache.get(name); + } + Class _class = (Class) cache.get(key); if(_class == Object.class){ if( name.equals("java.lang.Object") ) return Object.class; |