branch: externals/el-job
commit bddf5f373e5f0c7b8ac91d2ed6213589195f53b5
Author: Martin Edström <meedstro...@gmail.com>
Commit: Martin Edström <meedstro...@gmail.com>

    Fix a missing reference, and replace slot "results" w two new slots
---
 el-job.el | 49 ++++++++++++++++++++++++++++---------------------
 1 file changed, 28 insertions(+), 21 deletions(-)

diff --git a/el-job.el b/el-job.el
index 10b4e59482..543b1d3a9b 100644
--- a/el-job.el
+++ b/el-job.el
@@ -347,7 +347,8 @@ with one character of your choosing, such as a dot."
   spawn-args
   input-sets
   queue
-  results)
+  result-sets
+  merged-results)
 
 ;;;###autoload
 (cl-defun el-job-launch (&key load
@@ -478,7 +479,7 @@ still at work.  IF-BUSY may take on one of three symbols:
           (respawn nil)
           (exec nil))
       (el-job--with job
-          (.queue .busy .ready .sig .cores .method .spawn-args)
+          (.queue .busy .ready .sig .cores .method .spawn-args .callback)
         (unless (and .busy (eq if-busy 'noop))
           (when (functionp inputs)
             (setq inputs (funcall inputs)))
@@ -589,11 +590,11 @@ This puts them to work.  Each successful child will print 
output
 \(even nil output) to its associated process buffer, whereupon something
 should trigger `el-job--handle-output'."
   (el-job--with job
-      ( .ready .busy .input-sets .results .queue .cores .past-elapsed
+      ( .ready .busy .input-sets .result-sets .queue .cores .past-elapsed
         .timestamps .poll-timer .finish-times .anonymous .method
         .id .timeout )
     (cancel-timer .timeout)
-    (setf .results nil)
+    (setf .result-sets nil)
     (setf .finish-times nil)
     (let ((splits (el-job--split-optimally .queue .cores .past-elapsed)))
       (unless (length< splits (1+ (length .ready)))
@@ -690,28 +691,33 @@ If nil, infer it from the buffer, if process is still 
alive."
   (let* ((inhibit-quit t)
          (proc (or proc (get-buffer-process (current-buffer))))
          (job el-job-here)
-         (output (condition-case err (read (buffer-string))
-                   (( error )
-                    (el-job--unhide-buffer (el-job:stderr job))
-                    (dolist (proc (el-job--all-processes job))
-                      (el-job--unhide-buffer (process-buffer proc))
-                      (el-job--kill-quietly-keep-buffer proc))
-                    (error "In buffer %S: problems reading child output: %S"
-                           (current-buffer) err)))))
-    (when output
+         finish-time
+         durations
+         results)
+    (condition-case err (let ((output (read (buffer-string))))
+                          (setq finish-time (caar output))
+                          (setq durations (cdar output))
+                          (setq results (cdr output)))
+      (( error )
+       (el-job--unhide-buffer (el-job:stderr job))
+       (dolist (proc (el-job--all-processes job))
+         (el-job--unhide-buffer (process-buffer proc))
+         (el-job--kill-quietly-keep-buffer proc))
+       (error "In buffer %S: problems reading child output: %S"
+              (current-buffer) err)))
+    (when results
       (el-job--with job
-          ( .busy .ready .input-sets .past-elapsed .results .queue
+          ( .busy .ready .input-sets .past-elapsed .result-sets .queue
             .timestamps .id .temp-hook .anonymous .method .finish-times
-            .timeout )
-        (push (caar output) .finish-times)
+            .timeout .callback .merged-results )
+        (push finish-time .finish-times)
         ;; Record time spent by FUNCALL on each item in INPUTS,
         ;; for a better `el-job--split-optimally' in the future.
-        (let ((durations (cdar output))
-              (input (alist-get proc .input-sets)))
+        (let ((input (alist-get proc .input-sets)))
           (while durations
             (puthash (pop input) (pop durations) .past-elapsed)))
         ;; The `car' was just this library's metadata
-        (push (cdr output) .results)
+        (push results .result-sets)
         (setf .busy (delq proc .busy))
         (unless (eq .method 'reap)
           (push proc .ready))
@@ -730,8 +736,9 @@ If nil, infer it from the buffer, if process is still 
alive."
             (remhash .id el-jobs))
           ;; Finally the purpose of it all.
           ;; Did this really take 700 lines of code?
-          (setf .results (el-job--zip-all .results))
-          (when .callback (funcall .callback .results job))
+          (setf .merged-results (el-job--zip-all .result-sets))
+          (when .callback
+            (funcall .callback .merged-results job))
           (when .queue
             ;; There's more in the queue, run again at next good opportunity.
             (when (eq .method 'reap)

Reply via email to