Skip to content

Commit e8efc64

Browse files
committed
cleanup parallel build logic, ad real failure handling
1 parent 2e43d87 commit e8efc64

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

src/main/clojure/cljs/closure.clj

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -741,9 +741,9 @@
741741
(ana/warning :unprovided @env/*compiler* {:unprovided (sort unprovided)}))
742742
inputs))
743743

744-
(defn compile-task [^LinkedBlockingDeque deque input-set compiled opts]
744+
(defn compile-task [^LinkedBlockingDeque deque input-set compiled opts failed]
745745
(loop [ns-info (.pollFirst deque)]
746-
(when ns-info
746+
(when (and ns-info (not @failed))
747747
(let [{:keys [requires]} ns-info
748748
input-set' @input-set]
749749
(if (every? #(not (contains? input-set' %)) requires)
@@ -757,32 +757,31 @@
757757
{:output-file (comp/rename-to-js
758758
(util/ns->relpath (:ns ns-info)))})))
759759
(catch Throwable e
760-
(util/debug-prn e)))
761-
(when-let [ns (:ns ns-info)]
762-
(swap! input-set disj ns))
763-
(recur (.pollFirst deque)))
760+
(util/debug-prn e)
761+
(reset! failed true)))
762+
(when-not @failed
763+
(when-let [ns (:ns ns-info)]
764+
(swap! input-set disj ns))
765+
(recur (.pollFirst deque))))
764766
(do
765767
(Thread/sleep 10)
766768
(recur ns-info)))))))
767769

768770
(defn parallel-compile-sources [inputs compiler-stats opts]
769-
(let [deque (LinkedBlockingDeque. (count inputs))
770-
input-set (atom #{})
771+
(let [deque (LinkedBlockingDeque. inputs)
772+
input-set (atom (into #{} (comp (remove nil?) (map :ns)) inputs))
771773
cnt (+ 2 (.. Runtime getRuntime availableProcessors))
772774
agents (repeatedly cnt
773775
#(agent nil
774776
:error-handler
775777
(fn [err]
776778
(util/debug-prn err))))
777-
compiled (atom [])]
778-
(doseq [ns-info (reverse inputs)]
779-
(when-let [ns (:ns ns-info)]
780-
(swap! input-set conj ns))
781-
(.push deque ns-info))
779+
compiled (atom [])
780+
failed (atom false)]
782781
(doseq [agent agents]
783782
(send agent
784783
(fn [agent]
785-
(compile-task deque input-set compiled opts)
784+
(compile-task deque input-set compiled opts failed)
786785
agent)))
787786
(util/measure compiler-stats
788787
"Compile sources" (apply await agents))

0 commit comments

Comments
 (0)