summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2010-09-28 16:28:52 -0400
committerRich Hickey <richhickey@gmail.com>2010-09-28 16:28:52 -0400
commit167a73857a746e8dbeeb6d9ea8f99083aca7dc69 (patch)
tree56e5da8d084c19cfad85ed2cd98f12da7c392540
parentcc8372f12074b4cccbdd9cde3cfacfae069c57d3 (diff)
don't rely on softref queue, explicitly remove dead entry when found, fixes #444
-rw-r--r--src/jvm/clojure/lang/DynamicClassLoader.java2
-rw-r--r--src/jvm/clojure/lang/Keyword.java1
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);
}