Skip to content

Commit 271e5bf

Browse files
committed
Use session exec in refresh middleware
1 parent 5b26e27 commit 271e5bf

File tree

1 file changed

+33
-31
lines changed

1 file changed

+33
-31
lines changed

src/cider/nrepl/middleware/refresh.clj

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
[nrepl.transport :as transport]
1717
[orchard.misc :as u]))
1818

19-
(defonce ^:private refresh-tracker (agent (track/tracker)))
19+
(defonce ^:private refresh-tracker (volatile! (track/tracker)))
2020

2121
(defn- user-refresh-dirs
2222
"Directories to watch and reload, as configured by the user.
@@ -122,7 +122,6 @@
122122
:before before}))
123123

124124
(let [resolved? (resolve-and-invoke before msg)]
125-
126125
(transport/send
127126
transport
128127
(response-for msg
@@ -143,7 +142,6 @@
143142
:after after}))
144143

145144
(let [resolved? (resolve-and-invoke after msg)]
146-
147145
(transport/send
148146
transport
149147
(response-for msg {:status (if resolved?
@@ -155,36 +153,40 @@
155153
(error-reply {:error e} msg)))))
156154

157155
(defn- refresh-reply
158-
[{:keys [dirs transport] :as msg}]
159-
(send-off refresh-tracker
160-
(fn [tracker]
161-
(try
162-
(before-reply msg)
163-
164-
(-> tracker
165-
(dir/scan-dirs (or (seq dirs) (user-refresh-dirs))
166-
(select-keys msg [:platform :add-all?]))
167-
(remove-disabled)
168-
(doto (reloading-reply msg))
169-
(reload/track-reload)
170-
(doto (result-reply msg))
171-
(doto (after-reply msg)))
172-
173-
(catch Throwable e
174-
(error-reply {:error e} msg)
175-
tracker)
176-
177-
(finally
178-
(transport/send
179-
transport
180-
(response-for msg {:status :done})))))))
156+
[{:keys [dirs transport session id] :as msg}]
157+
(let [{:keys [exec]} (meta session)]
158+
(exec id
159+
(fn []
160+
(locking refresh-tracker
161+
(vswap! refresh-tracker
162+
(fn [tracker]
163+
(try
164+
(before-reply msg)
165+
166+
(-> tracker
167+
(dir/scan-dirs (or (seq dirs) (user-refresh-dirs))
168+
(select-keys msg [:platform :add-all?]))
169+
(remove-disabled)
170+
(doto (reloading-reply msg))
171+
(reload/track-reload)
172+
(doto (result-reply msg))
173+
(doto (after-reply msg)))
174+
175+
(catch Throwable e
176+
(error-reply {:error e} msg)
177+
tracker))))))
178+
(fn []
179+
(transport/send transport (response-for msg {:status :done}))))))
181180

182181
(defn- clear-reply
183-
[{:keys [transport] :as msg}]
184-
(send-off refresh-tracker (constantly (track/tracker)))
185-
(transport/send
186-
transport
187-
(response-for msg {:status :done})))
182+
[{:keys [transport session id] :as msg}]
183+
(let [{:keys [exec]} (meta session)]
184+
(exec id
185+
(fn []
186+
(locking refresh-tracker
187+
(vreset! refresh-tracker (track/tracker))))
188+
(fn []
189+
(transport/send transport (response-for msg {:status :done}))))))
188190

189191
(defn handle-refresh [handler msg]
190192
(case (:op msg)

0 commit comments

Comments
 (0)