guix-commits
[Top][All Lists]
Advanced

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

02/02: substitute: Avoid infinite loop when updating the substitute list


From: Ludovic Courtès
Subject: 02/02: substitute: Avoid infinite loop when updating the substitute list.
Date: Mon, 06 Jul 2015 23:08:45 +0000

civodul pushed a commit to branch master
in repository guix.

commit 075d99f19599b2903490942d8c3717cdd5b5d31e
Author: Andy Patterson <address@hidden>
Date:   Tue Jul 7 00:52:16 2015 +0200

    substitute: Avoid infinite loop when updating the substitute list.
    
    Reported
    at <http://lists.gnu.org/archive/html/guix-devel/2015-07/msg00119.html>.
    
    * guix/scripts/substitute.scm (http-multiple-get): When RESP has 
"Connection:
      close", consume HEAD anyway; always call PROC to read from BODY.
    
    Co-authored-by: Ludovic Courtès <address@hidden>
---
 guix/scripts/substitute.scm |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 8b4fa36..0baba91 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -462,17 +462,18 @@ to read the response body.  Return the list of results."
           (()
            (reverse result))
           ((head tail ...)
-           (let* ((resp (read-response p))
-                  (body (response-body-port resp)))
+           (let* ((resp   (read-response p))
+                  (body   (response-body-port resp))
+                  (result (cons (proc head resp body) result)))
              ;; The server can choose to stop responding at any time, in which
              ;; case we have to try again.  Check whether that is the case.
+             ;; Note that even upon "Connection: close", we can read from BODY.
              (match (assq 'connection (response-headers resp))
                (('connection 'close)
                 (close-port p)
-                (connect requests result))        ;try again
+                (connect tail result))            ;try again
                (_
-                (loop tail                        ;keep going
-                      (cons (proc head resp body) result)))))))))))
+                (loop tail result))))))))))       ;keep going
 
 (define (read-to-eof port)
   "Read from PORT until EOF is reached.  The data are discarded."



reply via email to

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