summaryrefslogtreecommitdiff
path: root/guix/store.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-09-17 22:00:26 +0200
committerLudovic Courtès <ludo@gnu.org>2018-09-17 22:10:31 +0200
commit3809824199cdd52446176c9cd4761dd09f732542 (patch)
treec895b78c0f2b317b7aceb586313686034189bd4b /guix/store.scm
parentd68aa41573bff6614a73ea28249cfd88fe206d38 (diff)
downloadgnu-guix-3809824199cdd52446176c9cd4761dd09f732542.tar
gnu-guix-3809824199cdd52446176c9cd4761dd09f732542.tar.gz
store: Add missing buffer flushes.
This could result in deadlock in unusual situations, whereby we'd start waiting for a reply while the query hasn't been flushed to the socket. * guix/store.scm (buffering-output-port)[flush]: Add call to 'force-output'. (add-to-store): Add call to 'write-buffered-output'.
Diffstat (limited to 'guix/store.scm')
-rw-r--r--guix/store.scm2
1 files changed, 2 insertions, 0 deletions
diff --git a/guix/store.scm b/guix/store.scm
index af7f6980cf..cc5dcef247 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -770,6 +770,7 @@ bytevector) as its internal buffer, and a thunk to flush this output port."
(define (flush)
(put-bytevector port buffer 0 total)
+ (force-output port)
(set! total 0))
(define (write bv offset count)
@@ -927,6 +928,7 @@ path."
(write-int (if recursive? 1 0) port)
(write-string hash-algo port)
(write-file file-name port #:select? select?)
+ (write-buffered-output server)
(let loop ((done? (process-stderr server)))
(or done? (loop (process-stderr server))))
(read-store-path port)))))