]> git.eshelyaron.com Git - emacs.git/commitdiff
Store ongoing compilations processes as hash table.
authorAndrea Corallo <akrl@sdf.org>
Sat, 25 Apr 2020 13:39:11 +0000 (14:39 +0100)
committerAndrea Corallo <akrl@sdf.org>
Sat, 25 Apr 2020 14:12:37 +0000 (15:12 +0100)
* lisp/emacs-lisp/comp.el (comp-async-processes): Rename as
`comp-async-compilations'.
(comp-async-runnings): Make use as `comp-async-compilations'.
(comp-run-async-workers): Likewise.

lisp/emacs-lisp/comp.el

index 1693e06018afe08419da1a422d3fb463a8a533c5..1369dd115dd7bf33a7b42c8d2cc7c95c7b912210 100644 (file)
@@ -2146,16 +2146,21 @@ Prepare every function for final compilation and drive the C back-end."
 (defvar comp-files-queue ()
   "List of Elisp files to be compiled.")
 
-(defvar comp-async-processes ()
-  "List of running async compilation processes.")
+(defvar comp-async-compilations (make-hash-table :test #'equal)
+  "Hash table file-name -> async compilation process.")
 
 (defun comp-async-runnings ()
   "Return the number of async compilations currently running.
 This function has the side effect of cleaning-up finished
-processes from `comp-async-processes'"
-  (setf comp-async-processes
-        (cl-delete-if-not #'process-live-p comp-async-processes))
-  (length comp-async-processes))
+processes from `comp-async-compilations'"
+  (cl-loop
+   for file-name in (cl-loop
+                     for file-name being each hash-key of comp-async-compilations
+                     for prc = (gethash file-name comp-async-compilations)
+                     unless (process-live-p prc)
+                       collect file-name)
+   do (remhash file-name comp-async-compilations))
+  (hash-table-count comp-async-compilations))
 
 (let (num-cpus)
   (defun comp-effective-async-max-jobs ()
@@ -2213,7 +2218,7 @@ display a message."
                                   (comp-output-filename source-file1)
                                   (eq load1 'late)))
                                (comp-run-async-workers)))))
-              (push process comp-async-processes))
+              (puthash source-file process comp-async-compilations))
          when (>= (comp-async-runnings) (comp-effective-async-max-jobs))
            do (cl-return)))
     ;; No files left to compile and all processes finished.