diff options
author | Mark H Weaver <mhw@netris.org> | 2018-02-11 04:05:07 -0500 |
---|---|---|
committer | Mark H Weaver <mhw@netris.org> | 2018-02-11 04:05:07 -0500 |
commit | a7fb29866520d5661e0ac8e47957c91a2a43e11e (patch) | |
tree | 50a169b022edbb31db49f09809d30dfe8597b862 /guix/ssh.scm | |
parent | 6730d895d3992f37f35f5351332f51a4be2fda50 (diff) | |
parent | 31c7002b466c6d09400a95bc15774f232b51ce0b (diff) |
Merge branch 'master' into core-updates
Diffstat (limited to 'guix/ssh.scm')
-rw-r--r-- | guix/ssh.scm | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/guix/ssh.scm b/guix/ssh.scm index 5e442024bc..9e90216a2d 100644 --- a/guix/ssh.scm +++ b/guix/ssh.scm @@ -108,9 +108,18 @@ Throw an error on failure." (use-modules (ice-9 match) (rnrs io ports) (rnrs bytevectors)) - (let ((sock (socket AF_UNIX SOCK_STREAM 0)) - (stdin (current-input-port)) - (stdout (current-output-port))) + (let ((sock (socket AF_UNIX SOCK_STREAM 0)) + (stdin (current-input-port)) + (stdout (current-output-port)) + (select* (lambda (read write except) + ;; This is a workaround for + ;; <https://bugs.gnu.org/30365> in Guile < 2.2.4: + ;; since 'select' sometimes returns non-empty sets for + ;; no good reason, call 'select' a second time with a + ;; zero timeout to filter out incorrect replies. + (match (select read write except) + ((read write except) + (select read write except 0)))))) (setvbuf stdout _IONBF) ;; Use buffered ports so that 'get-bytevector-some' returns up to the @@ -121,7 +130,7 @@ Throw an error on failure." (connect sock AF_UNIX ,socket-name) (let loop () - (match (select (list stdin sock) '() '()) + (match (select* (list stdin sock) '() '()) ((reads () ()) (when (memq stdin reads) (match (get-bytevector-some stdin) |