Skip to content

Commit fecb3f8

Browse files
committed
CLJS-2643: Socket REPL output can be directed to the wrong place
put outs into a ConcurrentHashMap keyed on thread name. Print to the correct out for a thread.
1 parent a56d06a commit fecb3f8

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

src/main/clojure/cljs/repl/browser.clj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
[cljs.stacktrace :as st]
2323
[cljs.analyzer :as ana]
2424
[cljs.build.api :as build])
25-
(:import [java.util.concurrent Executors]))
25+
(:import [java.util.concurrent Executors ConcurrentHashMap]))
2626

2727
(def ^:dynamic browser-state nil)
2828
(def ^:dynamic ordering nil)
2929
(def ^:dynamic es nil)
30+
(def outs (ConcurrentHashMap.))
3031

3132
(def ext->mime-type
3233
{".html" "text/html"
@@ -239,11 +240,12 @@
239240
(send-via es ordering add-in-order order f)
240241
(send-via es ordering run-in-order))
241242

242-
(defmethod handle-post :print [{:keys [content order]} conn _]
243+
(defmethod handle-post :print [{:keys [repl content order]} conn _]
243244
(constrain-order order
244245
(fn []
245-
(print (read-string content))
246-
(.flush *out*)))
246+
(binding [*out* (.get outs repl)]
247+
(print (read-string content))
248+
(.flush *out*))))
247249
(server/send-and-close conn 200 "ignore__"))
248250

249251
(defmethod handle-post :result [{:keys [content order]} conn _]
@@ -341,6 +343,7 @@
341343
(if launch-browser
342344
(maybe-browse-url base-url)
343345
(println (waiting-to-connect-message base-url)))))))
346+
(.put outs (.getName (Thread/currentThread)) *out*)
344347
(swap! server-state update :listeners inc))
345348

346349
(defrecord BrowserEnv []
@@ -356,6 +359,7 @@
356359
(-load [this provides url]
357360
(load-javascript this provides url))
358361
(-tear-down [this]
362+
(.remove outs (.getName (Thread/currentThread)))
359363
(let [server-state (:server-state this)]
360364
(when (zero? (:listeners (swap! server-state update :listeners dec)))
361365
(binding [server/state server-state] (server/stop))

0 commit comments

Comments
 (0)