|
741 | 741 | (ana/warning :unprovided @env/*compiler* {:unprovided (sort unprovided)}))
|
742 | 742 | inputs))
|
743 | 743 |
|
744 |
| -(defn compile-task [^LinkedBlockingDeque deque input-set compiled opts] |
| 744 | +(defn compile-task [^LinkedBlockingDeque deque input-set compiled opts failed] |
745 | 745 | (loop [ns-info (.pollFirst deque)]
|
746 |
| - (when ns-info |
| 746 | + (when (and ns-info (not @failed)) |
747 | 747 | (let [{:keys [requires]} ns-info
|
748 | 748 | input-set' @input-set]
|
749 | 749 | (if (every? #(not (contains? input-set' %)) requires)
|
|
757 | 757 | {:output-file (comp/rename-to-js
|
758 | 758 | (util/ns->relpath (:ns ns-info)))})))
|
759 | 759 | (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)))) |
764 | 766 | (do
|
765 | 767 | (Thread/sleep 10)
|
766 | 768 | (recur ns-info)))))))
|
767 | 769 |
|
768 | 770 | (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)) |
771 | 773 | cnt (+ 2 (.. Runtime getRuntime availableProcessors))
|
772 | 774 | agents (repeatedly cnt
|
773 | 775 | #(agent nil
|
774 | 776 | :error-handler
|
775 | 777 | (fn [err]
|
776 | 778 | (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)] |
782 | 781 | (doseq [agent agents]
|
783 | 782 | (send agent
|
784 | 783 | (fn [agent]
|
785 |
| - (compile-task deque input-set compiled opts) |
| 784 | + (compile-task deque input-set compiled opts failed) |
786 | 785 | agent)))
|
787 | 786 | (util/measure compiler-stats
|
788 | 787 | "Compile sources" (apply await agents))
|
|
0 commit comments