[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)))))))