diff options
| author | Ludovic Courtès <ludo@gnu.org> | 2017-06-13 23:20:25 +0200 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2017-06-13 23:22:19 +0200 |
| commit | 8e469b67f95cfe5b95405b503b8ee315fdf8ce66 (patch) | |
| tree | 851fef8a3231b0dec9cbb40a8e8e7b7876764cfb | |
| parent | 4e863eb35fd8337eab48928e7733b7f6b7b2c242 (diff) | |
gnu: guile-ssh: Close RREPL channel ports before they are finalized.
Partly fixes <https://bugs.gnu.org/26976>.
* gnu/packages/patches/guile-ssh-channel-finalization.patch: New file.
* gnu/packages/ssh.scm (guile-ssh)[source](patches): Use it.
* gnu/local.mk (dist_patch_DATA): Add it.
| -rw-r--r-- | gnu/local.mk | 3 | ||||
| -rw-r--r-- | gnu/packages/patches/guile-ssh-channel-finalization.patch | 28 | ||||
| -rw-r--r-- | gnu/packages/ssh.scm | 3 |
3 files changed, 32 insertions, 2 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index f761ad21e46..608ded75790 100644 --- a/gnu/local.mk +++ b/gnu/local.mk | |||
| @@ -656,8 +656,9 @@ dist_patch_DATA = \ | |||
| 656 | %D%/packages/patches/guile-present-coding.patch \ | 656 | %D%/packages/patches/guile-present-coding.patch \ |
| 657 | %D%/packages/patches/guile-relocatable.patch \ | 657 | %D%/packages/patches/guile-relocatable.patch \ |
| 658 | %D%/packages/patches/guile-rsvg-pkgconfig.patch \ | 658 | %D%/packages/patches/guile-rsvg-pkgconfig.patch \ |
| 659 | %D%/packages/patches/guile-ssh-rexec-bug.patch \ | 659 | gnu/packages/patches/guile-ssh-channel-finalization.patch \ |
| 660 | %D%/packages/patches/guile-ssh-double-free.patch \ | 660 | %D%/packages/patches/guile-ssh-double-free.patch \ |
| 661 | %D%/packages/patches/guile-ssh-rexec-bug.patch \ | ||
| 661 | %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \ | 662 | %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \ |
| 662 | %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \ | 663 | %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \ |
| 663 | %D%/packages/patches/gtk2-theme-paths.patch \ | 664 | %D%/packages/patches/gtk2-theme-paths.patch \ |
diff --git a/gnu/packages/patches/guile-ssh-channel-finalization.patch b/gnu/packages/patches/guile-ssh-channel-finalization.patch new file mode 100644 index 00000000000..54b5055a20b --- /dev/null +++ b/gnu/packages/patches/guile-ssh-channel-finalization.patch | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | Avoid asynchronous channel finalization, which could lead to segfaults due to | ||
| 2 | libssh not being thread-safe: <https://bugs.gnu.org/26976>. | ||
| 3 | |||
| 4 | --- guile-ssh-0.11.0/modules/ssh/dist/node.scm 2017-06-13 14:37:44.861671297 +0200 | ||
| 5 | +++ guile-ssh-0.11.0/modules/ssh/dist/node.scm 2017-06-13 14:38:02.841580565 +0200 | ||
| 6 | @@ -391,11 +391,18 @@ listens on an expected port, return #f o | ||
| 7 | "Evaluate QUOTED-EXP on the node and return the evaluated result." | ||
| 8 | (let ((repl-channel (node-open-rrepl node))) | ||
| 9 | (rrepl-skip-to-prompt repl-channel) | ||
| 10 | - (call-with-values (lambda () (rrepl-eval repl-channel quoted-exp)) | ||
| 11 | - (lambda vals | ||
| 12 | - (and (node-stop-repl-server? node) | ||
| 13 | + (dynamic-wind | ||
| 14 | + (const #t) | ||
| 15 | + (lambda () | ||
| 16 | + (rrepl-eval repl-channel quoted-exp)) | ||
| 17 | + (lambda () | ||
| 18 | + (when (node-stop-repl-server? node) | ||
| 19 | (node-stop-server node)) | ||
| 20 | - (apply values vals))))) | ||
| 21 | + | ||
| 22 | + ;; Close REPL-CHANNEL right away to prevent finalization from | ||
| 23 | + ;; happening in another thread at the wrong time (see | ||
| 24 | + ;; <https://bugs.gnu.org/26976>.) | ||
| 25 | + (close-port repl-channel))))) | ||
| 26 | |||
| 27 | (define (node-eval-1 node quoted-exp) | ||
| 28 | "Evaluate QUOTED-EXP on the node and return the evaluated result. The | ||
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm index d79663a2b59..d03686c11c8 100644 --- a/gnu/packages/ssh.scm +++ b/gnu/packages/ssh.scm | |||
| @@ -229,7 +229,8 @@ Additionally, various channel-specific options can be negotiated.") | |||
| 229 | (base32 | 229 | (base32 |
| 230 | "0r261i8kc3avbmbwgyzak2vnqwssjlgz37g2y2fwm80w9bmn2m7j")) | 230 | "0r261i8kc3avbmbwgyzak2vnqwssjlgz37g2y2fwm80w9bmn2m7j")) |
| 231 | (patches (search-patches "guile-ssh-rexec-bug.patch" | 231 | (patches (search-patches "guile-ssh-rexec-bug.patch" |
| 232 | "guile-ssh-double-free.patch")) | 232 | "guile-ssh-double-free.patch" |
| 233 | "guile-ssh-channel-finalization.patch")) | ||
| 233 | (modules '((guix build utils))) | 234 | (modules '((guix build utils))) |
| 234 | (snippet | 235 | (snippet |
| 235 | ;; 'configure.ac' mistakenly tries to link files from examples/ | 236 | ;; 'configure.ac' mistakenly tries to link files from examples/ |
