Skip to content

Commit 7e4ebf6

Browse files
committed
Inhibit concurrent loading of deferred middleware
1 parent 9395c10 commit 7e4ebf6

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

src/cider/nrepl.clj

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
"Map of `delay`s holding deferred middleware handlers."
1313
(atom nil))
1414

15+
(def LOCK
16+
"Lock used to inhibit concurrent `require` of the middleware namespaces."
17+
(Object.))
18+
1519
(defn- resolve-or-fail [sym]
1620
(or (resolve sym)
1721
(throw (IllegalArgumentException. (format "Cannot resolve %s" sym)))))
@@ -25,8 +29,9 @@
2529
sym (symbol (name `~fn-name))]
2630
(swap! DELAYS assoc sym
2731
(delay
28-
(require `~ns)
29-
(resolve-or-fail `~fn-name)))
32+
(locking LOCK
33+
(require `~ns)
34+
(resolve-or-fail `~fn-name))))
3035
`(@(get @DELAYS '~sym) ~handler ~msg)))
3136

3237
(defmacro ^{:arglists '([name handler-fn descriptor]

0 commit comments

Comments
 (0)