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 clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> 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 clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to