Skip to content

Commit 1d3e723

Browse files
author
Michail Pevnev
committed
Collect candidates eagerly
`concat` produces a lazy sequence, which makes its repeated usage in a loop a potential stack overflow hazard (when the produced seq gets realized and has to recur over its subseqs).
1 parent c0f77f6 commit 1d3e723

File tree

1 file changed

+1
-7
lines changed

1 file changed

+1
-7
lines changed

src/main/clojure/org/ajoberstar/jovial/engine.clj

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,7 @@
128128
(defn select [^EngineDiscoveryRequest request ^UniqueId id]
129129
(let [listener (.getDiscoveryListener request)
130130
selectors (.getSelectorsByType request DiscoverySelector)]
131-
(loop [result []
132-
head (first selectors)
133-
tail (rest selectors)]
134-
(let [candidates (try-select listener id head)]
135-
(if (seq tail)
136-
(recur (concat result candidates) (first tail) (rest tail))
137-
(concat result candidates))))))
131+
(reduce #(into %1 (try-select listener id %2)) [] selectors)))
138132

139133
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
140134
;; Discovery Descriptor Support

0 commit comments

Comments
 (0)