guix-commits
[Top][All Lists]
Advanced

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

20/20: http-client: Remove exception mishandling in 'http-multiple-get'.


From: guix-commits
Subject: 20/20: http-client: Remove exception mishandling in 'http-multiple-get'.
Date: Sun, 25 Apr 2021 08:37:57 -0400 (EDT)

civodul pushed a commit to branch version-1.3.0
in repository guix.

commit 15b6c2a965e66084f3be2e88439dba408f7613ab
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sat Apr 24 18:07:09 2021 +0200

    http-client: Remove exception mishandling in 'http-multiple-get'.
    
    Partly fixes <https://bugs.gnu.org/47867>.
    Reported by Florian Pelz <pelzflorian@pelzflorian.de>.
    
    The non-tail recursive call to 'connect' could cause requests to be
    processed twice, with 'p' possibly closed the second time.
    
    Regression introduced in 205833b72c5517915a47a50dbe28e7024dc74e57 and
    carried over in 45fce38fb0b6c6796906149ade145b8d3594c1c6.
    
    * guix/http-client.scm (http-multiple-get): Remove call to 'close-port'
    and recursive call to 'connect' when the 'write-request' block returns #f.
---
 guix/http-client.scm | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/guix/http-client.scm b/guix/http-client.scm
index bb1b0ee..10bc278 100644
--- a/guix/http-client.scm
+++ b/guix/http-client.scm
@@ -214,15 +214,14 @@ returning."
         ;; Inherit the HTTP proxying property from P.
         (set-http-proxy-port?! buffer (http-proxy-port? p))
 
-        (unless (false-if-networking-error
-                 (begin
-                   (for-each (cut write-request <> buffer) batch)
-                   (put-bytevector p (get))
-                   (force-output p)
-                   #t))
-          ;; If PORT becomes unusable, open a fresh connection and retry.
-          (close-port p)                          ; close the broken port
-          (connect #f requests result)))
+        ;; Swallow networking errors that could occur due to connection reuse
+        ;; and the like; they will be handled down the road when trying to
+        ;; read responses.
+        (false-if-networking-error
+         (begin
+           (for-each (cut write-request <> buffer) batch)
+           (put-bytevector p (get))
+           (force-output p))))
 
       ;; Now start processing responses.
       (let loop ((sent      batch)



reply via email to

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