Skip to content
This repository was archived by the owner on Oct 21, 2022. It is now read-only.

Commit f2abb85

Browse files
committed
make sure to remove clients when they disconnect so that remote process don't fall over trying to send io messages to them
Signed-off-by: Chris Granger <ibdknox@gmail.com>
1 parent 26dca15 commit f2abb85

6 files changed

Lines changed: 25 additions & 9 deletions

File tree

lein-light-nrepl/project.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
(defproject lein-light-nrepl "0.0.15"
1+
(defproject lein-light-nrepl "0.0.16"
22
:description "FIXME: write description"
33
:url "http://example.com/FIXME"
44
:license {:name "Eclipse Public License"

lein-light-nrepl/src/lighttable/nrepl/core.clj

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@
1212

1313
(def ^{:dynamic true} *ltmsg* nil)
1414
(def server (atom nil))
15-
(def clients (atom []))
15+
(def clients (atom {}))
1616
(def old-out System/out)
17+
(def old-err System/err)
18+
(def old-*out* *out*)
19+
(def old-*err* *err*)
1720
(def my-settings (atom {:name "clj"
1821
:dir (fs/absolute-path fs/*cwd*)
1922
:type "lein-light-nrepl"
@@ -63,11 +66,11 @@
6366
(transport/send (:transport msg) (response-for msg {:op (name op) :id (or (:id msg) (:client-id @my-settings)) :encoding encoding :data data}))))))
6467

6568
(defn broadcast [op data]
66-
(doseq [client @clients]
69+
(doseq [client (vals @clients)]
6770
(respond client op data)))
6871

6972
(defn broadcast-to [id op data]
70-
(doseq [client @clients]
73+
(doseq [client (vals @clients)]
7174
(respond (assoc client :id id) op data)))
7275

7376
(defn safe-respond-to [id op data]
@@ -76,7 +79,10 @@
7679
(broadcast-to id op data)))
7780

7881
(defn capture-client [msg]
79-
(swap! clients conj (select-keys msg [:session :transport])))
82+
(swap! clients assoc (-> msg :session meta :id) (select-keys msg [:session :transport])))
83+
84+
(defn remove-client [msg]
85+
(swap! clients dissoc (-> msg :session meta :id)))
8086

8187
(defn queued [{:keys [op session id transport] :as msg} executor]
8288
(queue-eval session executor
@@ -152,6 +158,12 @@
152158
(alter-var-root #'*err* (fn [_] err))
153159
))
154160

161+
(defn restore-io []
162+
(System/setOut old-out)
163+
(System/setErr old-err)
164+
(alter-var-root #'*out* (fn [_] old-*out*))
165+
(alter-var-root #'*err* (fn [_] old-*err*)))
166+
155167
(defn start [info]
156168
;(reset! server (start-server :port 7888 :handler (default-handler #'lighttable-ops)))
157169
)

lein-light-nrepl/src/lighttable/nrepl/handler.clj

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@
2828
[h & {:keys [executor] :or {executor (core/configure-executor)}}]
2929
(fn [{:keys [op session interrupt-id id transport] :as msg}]
3030
(cond
31-
(= op "client.close") (when-not (:remote @core/my-settings)
32-
(System/exit 0))
31+
(= op "client.close") (do
32+
(core/remove-client msg)
33+
(when (empty? @core/clients)
34+
(core/restore-io))
35+
(when-not (:remote @core/my-settings)
36+
(System/exit 0)))
3337
(= op "client.init") (do
3438
(core/capture-client msg)
3539
(core/redirect-io msg)

plugin.edn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{:name "Clojure"
2-
:version "0.0.9"
2+
:version "0.0.10"
33
:author "Kodowa"
44
:source "https://github.com/LightTable/Clojure"
55
:desc "Clojure integration for Light Table"

runner/src/leiningen/light_nrepl.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
init (if-let [cur-init (-> project :repl-options :init)]
3434
(list 'do cur-init init)
3535
init)
36-
profile {:dependencies '[[lein-light-nrepl/lein-light-nrepl "0.0.15"]
36+
profile {:dependencies '[[lein-light-nrepl/lein-light-nrepl "0.0.16"]
3737
[org.clojure/tools.reader "0.8.3"]]
3838
:repl-options {:nrepl-middleware ['lighttable.nrepl.handler/lighttable-ops]
3939
:init (with-meta init {:replace true})}}
-2 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)