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.
		
			
				
	
	
		
			28 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Avoid asynchronous channel finalization, which could lead to segfaults due to
 | 
						|
libssh not being thread-safe: <https://bugs.gnu.org/26976>.
 | 
						|
 | 
						|
--- guile-ssh-0.11.0/modules/ssh/dist/node.scm	2017-06-13 14:37:44.861671297 +0200
 | 
						|
+++ guile-ssh-0.11.0/modules/ssh/dist/node.scm	2017-06-13 14:38:02.841580565 +0200
 | 
						|
@@ -391,11 +391,18 @@ listens on an expected port, return #f o
 | 
						|
   "Evaluate QUOTED-EXP on the node and return the evaluated result."
 | 
						|
   (let ((repl-channel (node-open-rrepl node)))
 | 
						|
     (rrepl-skip-to-prompt repl-channel)
 | 
						|
-    (call-with-values (lambda () (rrepl-eval repl-channel quoted-exp))
 | 
						|
-      (lambda vals
 | 
						|
-        (and (node-stop-repl-server? node)
 | 
						|
+    (dynamic-wind
 | 
						|
+      (const #t)
 | 
						|
+      (lambda ()
 | 
						|
+        (rrepl-eval repl-channel quoted-exp))
 | 
						|
+      (lambda ()
 | 
						|
+        (when (node-stop-repl-server? node)
 | 
						|
              (node-stop-server node))
 | 
						|
-        (apply values vals)))))
 | 
						|
+
 | 
						|
+        ;; Close REPL-CHANNEL right away to prevent finalization from
 | 
						|
+        ;; happening in another thread at the wrong time (see
 | 
						|
+        ;; <https://bugs.gnu.org/26976>.)
 | 
						|
+        (close-port repl-channel)))))
 | 
						|
 
 | 
						|
 (define (node-eval-1 node quoted-exp)
 | 
						|
   "Evaluate QUOTED-EXP on the node and return the evaluated result.  The
 |