summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2021-04-24 18:07:09 +0200
committerLudovic Courtès <ludo@gnu.org>2021-04-24 19:08:13 +0200
commitc50db7156dfdd5dc126d7812cf4f51903bfa4599 (patch)
treee0bf279282c47e3ff1b439bef05d75c486bfd397
parent02d62978f46fcc2793608bb57a2c20a30555dbba (diff)
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.
-rw-r--r--guix/http-client.scm17
1 files changed, 8 insertions, 9 deletions
diff --git a/guix/http-client.scm b/guix/http-client.scm
index bb1b0eeb56..10bc278023 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)