Subject: bug#61350: Eglot over Tramp freezes with large project

From: João Távora <[email-masked]>
Date: Wed, 01 Mar 2023 11:08:16 +0000

Gregory Heytings <[email-masked]> writes:

>>> Users, who have set ControlMaster in their ~/.ssh/config (like
>>> Thomas), are not satified. For them we need another setting of
>>> tramp-use-ssh-controlmaster-options. I'm working on this.
>>
>> Looking at the Tramp code, I think Thomas's idea of using
>>
>>  -o "ControlMaster=no" -o "ControlPath=none"
>>
>> would probably be quite effective.
>>
>
> Instead of turning ControlMaster off, I suggest to first try to set
> ControlPersist on.  The "freeze" problem described here is typical of
> multiplexing an ssh connection with ControlMaster set without also
> setting ControlPersist.  (If you set ControlMaster without also
> setting ControlPersist, the socket is closed when the connection by
> which it was created is closed, even if other connections are still
> using it.)

Still hangs.  I tried my previously described test with this patch:

diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index ec8437176db..f9ac83e4008 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -4974,10 +4974,10 @@ tramp-ssh-controlmaster-options
 	      (when (zerop
 		     (tramp-call-process
 		      vec "ssh" nil nil nil
-		      "-G" "-o" "ControlPersist=no" "0.0.0.1"))
+		      "-G" "-o" "ControlPersist=yes" "0.0.0.1"))
 		(setq tramp-ssh-controlmaster-options
 		      (concat tramp-ssh-controlmaster-options
-			      " -o ControlPersist=no")))))))
+			      " -o ControlPersist=yes")))))))
       tramp-ssh-controlmaster-options)))
 
 (defun tramp-scp-strict-file-name-checking (vec)