|
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