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

Reply via email to