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

From: Thomas Koch <[email-masked]>
Date: Sun, 26 Feb 2023 12:24:39 +0200 (EET)

Michael and I met yesterday for a debugging session.

Eventually we tried without SSH ControlMaster (via tramp-use-ssh-controlmaster-options). Eglot did not freeze anymore.

I actually found the hint to ControlMaster already early on but probably made a mistake when trying it:

- Either I set tramp-ssh-controlmaster-options to nil, which is the default and does not have any effect.
- Or SSH still used ControlMaster due to my ssh config:

  Host *
     ControlMaster auto

I still see one

error in process filter: tramp-error: peculiar error: "Forbidden reentrant call of Tramp"

I don't consider this a solution but just a workaround. After all I had tramp freeze my emacs also before I used eglot. After reading jsonrpc and tramp source code yesterday I also believe that Joãos proposal might help to make Tramp more stable.

Unfortunately I've not done any elisp programming yet and thus can't help with coding.

I was thinking whether there could be an abstract (and reliable) process interaction library to be used by tramp, jsonrpc and others. In my init.el I found at least magit (magit-process.el) and maybe org-export (ox.el) which also call external processes and need to reliably parse process output.

jsonrpc is special since it needs to match process output by message id to previous process input.

Otherwise it seems to me that there is a lot of shared logic?