Good catch, guys.
Interesting that I never noticed this; likely because Pomegranate's
`classloader-hierarchy` function ends up starting its walk from (RT/baseLoader)
(which will be changing to the context classloader shortly):
https://github.com/cemerick/pomegranate/blob/master/src/main/clojure/cemerick/pomegranate.clj#L54
I'm open to suggestions. I'm not keen on having yet another divergence in
nREPL behaviour between 1.5.0 and all prior revs of Clojure, so an nREPL-local
fix would be great.
My first impulse right now is to boot clojure.main/repl entirely and groom a
replacement "in-house", as it were (which I probably should have done from day
1).
- Chas
On Dec 10, 2012, at 11:32 AM, Colin Jones wrote:
> Right, this is because nREPL uses clojure.main/repl each time it does an
> evaluation. See http://dev.clojure.org/jira/browse/NREPL-31 for a related
> issue that was addressed by modifying clojure.main/repl.
>
> I'm not sure where a fix for this would belong (nREPL or clojure.main), but I
> went ahead and opened an nREPL JIRA issue to track it:
> http://dev.clojure.org/jira/browse/NREPL-36
>
> - Colin
>
>
>
>
> On Monday, December 10, 2012 2:46:10 AM UTC-6, Vladimir Tsichevski wrote:
> Hi,
>
> just found that every interaction with Clojure REPL causes one more
> DynamicClassLoader put on the Thread context class loader chain.
>
> Here is how clojure.main/repl beginning looks like:
>
> (let [cl (.getContextClassLoader (Thread/currentThread))]
> (.setContextClassLoader (Thread/currentThread)
> (clojure.lang.DynamicClassLoader. cl)))
>
> And this is how to observe it:
>
> nREPL server started on port 19987
> REPL-y 0.1.0-beta10
> Clojure 1.4.0
> Exit: Control+D or (exit) or (quit)
> Commands: (user/help)
> Docs: (doc function-name-here)
> (find-doc "part-of-name-here")
> Source: (source function-name-here)
> (user/sourcery function-name-here)
> Javadoc: (javadoc java-object-or-class-here)
> Examples from clojuredocs.org: [clojuredocs or cdoc]
> (user/clojuredocs name-here)
> (user/clojuredocs "ns-here" "name-here")
> user=> (defn print-class-loader-stack
> ([]
> (print-class-loader-stack (.getContextClassLoader
> (Thread/currentThread))))
> ([cl]
> (if cl
> (do
> (pprint cl)
> (print-class-loader-stack (.getParent cl)))
> (println "*Top*"))))
> #_=> #_=> #_=> #_=> #_=> #_=> #_=> #_=>
> #'user/print-class-loader-stack
> user=> (print-class-loader-stack)
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@26a0c73f>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@6f603bdc>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@2f368c5d>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5b31fd9>
> #<AppClassLoader sun.misc.Launcher$AppClassLoader@4aad3ba4>
> #<ExtClassLoader sun.misc.Launcher$ExtClassLoader@3326b249>
> *Top*
> nil
> user=> 1
> 1
> user=> 1
> 1
> user=> 1
> 1
> user=> 1
> 1
> user=> (print-class-loader-stack)
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5be04861>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@7481933a>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@273f212a>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@4178feba>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5323961b>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@26a0c73f>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@6f603bdc>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@2f368c5d>
> #<DynamicClassLoader clojure.lang.DynamicClassLoader@5b31fd9>
> #<AppClassLoader sun.misc.Launcher$AppClassLoader@4aad3ba4>
> #<ExtClassLoader sun.misc.Launcher$ExtClassLoader@3326b249>
> *Top*
> nil
> user=>
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en