emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/request 5381058499 1/2: Thread switches result in (process


From: ELPA Syncer
Subject: [nongnu] elpa/request 5381058499 1/2: Thread switches result in (process-buffer proc) being nil
Date: Tue, 14 Jun 2022 13:03:15 -0400 (EDT)

branch: elpa/request
commit 5381058499f02c01930dda2f1fa452aa06023b41
Author: dickmao <none>
Commit: dickmao <none>

    Thread switches result in (process-buffer proc) being nil
    
    These have resulted in dreaded "semaphore never called nil nil".
---
 request.el | 31 +++++++++++++++++++------------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/request.el b/request.el
index 95b7003e5b..459ffaa1d1 100644
--- a/request.el
+++ b/request.el
@@ -584,11 +584,13 @@ and requests.request_ (Python).
   "Parse BUFFER according to PARSER.
 Delegate to callbacks SUCCESS, ERROR, and COMPLETE the STATUS-CODE of
 RESPONSE via ENCODING."
+  (when (buffer-live-p buffer)
+    ;; questionable whether BUFFER should override RESPONSE.
+    (setf (request-response--buffer response) buffer))
   (request-log 'debug "request--callback: UNPARSED\n%s"
-               (when (buffer-live-p buffer)
-                 (with-current-buffer buffer (buffer-string))))
-  ;; Reset RESPONSE buffer to argument BUFFER.
-  (setf (request-response--buffer response) buffer)
+               (when (buffer-live-p (request-response--buffer response))
+                 (with-current-buffer (request-response--buffer response)
+                   (buffer-string))))
   (cl-symbol-macrolet ((timer (request-response--timer response)))
     (when timer
       (cancel-timer timer)
@@ -610,7 +612,7 @@ RESPONSE via ENCODING."
         (request--parse-data response encoding parser)
       (error (unless error-thrown (setq error-thrown err))
              (unless symbol-status (setq symbol-status 'parse-error))))
-    (kill-buffer buffer)
+    (kill-buffer (request-response--buffer response))
 
     ;; Ensuring `symbol-status' and `error-thrown' are consistent
     ;; is why we should get rid of `symbol-status'
@@ -1112,8 +1114,11 @@ START-URL is the URL requested."
 (defun request--curl-callback (url proc event)
   "Ensure `request--callback' gets called after curl to URL finishes.
 See info entries on sentinels regarding PROC and EVENT."
-  (let* ((buffer (process-buffer proc))
-         (response (process-get proc :request-response))
+  (let* ((response (process-get proc :request-response))
+         ;; questionable whether (process-buffer proc)
+         ;; should override RESPONSE's -buffer member.
+         (buffer (or (process-buffer proc)
+                     (request-response--buffer response)))
          (settings (request-response-settings response)))
     (request-log 'debug "request--curl-callback: event %s" event)
     (request-log 'trace "request--curl-callback: raw-bytes=\n%s"
@@ -1170,22 +1175,24 @@ See info entries on sentinels regarding PROC and EVENT."
     (prog1 (apply #'request--curl url
                   :semaphore (lambda (&rest _) (setq finished t))
                   settings)
-      (cl-loop with interval = 0.05
+      (cl-loop with buf = (request-response--buffer response)
+               with interval = 0.05
                with timeout = 5
                with maxiter = (truncate (/ timeout interval))
                with iter = 0
                until (or (>= iter maxiter) finished)
                do (accept-process-output nil interval)
-               for buf = (request-response--buffer response)
-               for proc = (and (bufferp buf) (get-buffer-process buf))
+               for proc = (get-buffer-process buf)
                if (or (not proc) (not (process-live-p proc)))
+               ;; only run the clock if lollygagging
+               ;; (before or after process lifetime)
                do (cl-incf iter)
                end
                finally (when (>= iter maxiter)
                          (let ((m "request--curl-sync: semaphore never 
called"))
-                           (princ (format "%s %s %s\n"
+                           (princ (format "%s %S %s\n"
                                           m
-                                          (buffer-name buf)
+                                          buf
                                           (buffer-live-p buf))
                                   #'external-debugging-output)
                            (request-log 'error m)))))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]