Duplicate
Details
Assignee
UnassignedUnassignedReporter
Nicola MomettoNicola MomettoLabels
Approval
VettedPatch
CodePriority
MajorAffects versions
Fix versions
Details
Details
Assignee
Unassigned
UnassignedReporter
Nicola Mometto
Nicola MomettoLabels
Approval
Vetted
Patch
Code
Priority

Affects versions
Fix versions
Created January 29, 2015 at 6:21 PM
Updated June 18, 2015 at 5:24 PM
Resolved June 18, 2015 at 5:24 PM
The patch for https://clojure.atlassian.net/browse/CLJ-979#icft=CLJ-979 exposed an issue with how clojure.core/compile is implemented, which causes the bug reported here: https://groups.google.com/d/msg/clojure-dev/jj87-4yVlWI/YKG4QazhPuAJ
The cause of this regression is that clojure.core/compile doesn't take into account clojure.core/loaded-libs, causing
(binding [*compile-files* true] (require 'some.ns)) (compile 'some.ns)
to reload 'some-ns from the AOT class with the call to compile.
Since the AOT compiled namespace is not loaded by DynamicClassLoader but using the underlying java.net.URLClassLoader, code that relies on deftypes will have references to the AOT versions hardcoded, breaking the class loading policy introduced with https://clojure.atlassian.net/browse/CLJ-979#icft=CLJ-979 of prefering the in-memory versions to the AOT ones.
The fix for this, as implemented in the attached patch, is to make compile loaded-libs-aware, so that it won't force any namespace re-loading when unnecessary.