diff options
author | Rich Hickey <richhickey@gmail.com> | 2010-09-28 16:28:52 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2010-09-28 16:28:52 -0400 |
commit | 167a73857a746e8dbeeb6d9ea8f99083aca7dc69 (patch) | |
tree | 56e5da8d084c19cfad85ed2cd98f12da7c392540 | |
parent | cc8372f12074b4cccbdd9cde3cfacfae069c57d3 (diff) |
don't rely on softref queue, explicitly remove dead entry when found, fixes #444
-rw-r--r-- | src/jvm/clojure/lang/DynamicClassLoader.java | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Keyword.java | 1 |
2 files changed, 3 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/DynamicClassLoader.java b/src/jvm/clojure/lang/DynamicClassLoader.java index 8719dc18..e85071a0 100644 --- a/src/jvm/clojure/lang/DynamicClassLoader.java +++ b/src/jvm/clojure/lang/DynamicClassLoader.java @@ -54,6 +54,8 @@ protected Class<?> findClass(String name) throws ClassNotFoundException{ Class c = cr.get(); if(c != null) return c; + else + classCache.remove(name, cr); } return super.findClass(name); } diff --git a/src/jvm/clojure/lang/Keyword.java b/src/jvm/clojure/lang/Keyword.java index 75adcdd7..c20f1214 100644 --- a/src/jvm/clojure/lang/Keyword.java +++ b/src/jvm/clojure/lang/Keyword.java @@ -36,6 +36,7 @@ public static Keyword intern(Symbol sym){ if(existingk != null) return existingk; //entry died in the interim, do over + table.remove(sym, existingRef); return intern(sym); } |