guix-commits
[Top][All Lists]
Advanced

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

[no subject]


From: Ludovic Courtès
Date: Fri, 23 Aug 2024 14:46:18 -0400 (EDT)

branch: main
commit 59010a5ba32a5f0802d28900908ee9c75f473a66
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Fri Aug 23 19:48:42 2024 +0200

    remote: ‘send-log’ uses suspendable ‘make-zlib-output-port’.
    
    Fixes <https://issues.guix.gnu.org/72722>.
    
    Previously, the file descriptor beneath SOCK was passed to zlib’s
    ‘gzwrite’ C function via ‘make-gzip-output-port’.  However, SOCK is
    O_NONBLOCK and ‘gzwrite’ errors out upon EAGAIN.  This would lead
    ‘send-log’ to fail, then causing EPIPE in ‘build-derivations&’, which in
    turn would lead the build to be marked as failing.
    
    * src/cuirass/remote.scm (send-log): Use ‘make-zlib-output-port’ instead
    of ‘make-gzip-output-port’.
---
 src/cuirass/remote.scm | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/cuirass/remote.scm b/src/cuirass/remote.scm
index 52efbd9..cf918c4 100644
--- a/src/cuirass/remote.scm
+++ b/src/cuirass/remote.scm
@@ -364,8 +364,11 @@ PRIVATE-KEY to sign narinfos."
 
          ;; Note: Don't use 'call-with-gzip-output-port' since it's
          ;; implemented in terms of 'dynamic-wind' as of Guile-Zlib 0.1.0,
-         ;; making it unsuitable in a fiberized program.
-         (let ((compressed (make-gzip-output-port sock)))
+         ;; making it unsuitable in a fiberized program.  Also, do not use
+         ;; 'make-gzip-output-port' since that passes the O_NONBLOCK file
+         ;; descriptor to 'gzwrite', which does not know how to deal with
+         ;; EAGAIN.
+         (let ((compressed (make-zlib-output-port sock #:format 'gzip)))
            (catch #t
              (lambda ()
                (dump-port log compressed)



reply via email to

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