Subject: Re: bug#72517: 31.0.50; [PATCH] Close X connection upon deletion of last emacsclient frame

From: Po Lu <[email-masked]>
Date: Thu, 08 Aug 2024 17:22:00 +0800

Thomas Fitzsimmons <[email-masked]> writes:

> Thank you for taking a look at this.
>
> It is indeed SSH that is refusing to exit.
>
> i.e., after exiting the emacsclient frame, I am returned to the remote
> SSH shell.  Pressing control-d in that shell does not return me back to
> my local shell (the shell from which I SSH'd).  I have to press
> control-c and then I am returned back to my local shell.
>
> Nothing emacs-related is hanging; the emacs daemon continues running,
> and I can re-SSH and re-run emacsclient.  So the control-c to exit the
> SSH session does not seem to destabilize the emacs daemon.  (However, I
> suspect the control-c is severing the X display connection which seems
> less safe and potentially more subject to race conditions than Emacs
> itself closing the X connection.)
>
> There are so many use cases for emacsclient that any patch seems risky,
> which is why I filed this bug report with something that works for me.
>
> If there is a comprehensive set of emacsclient connection/disconnection
> tests, and/or any verbosity/debugging options that might help, then I
> can run them by hand on my setup.  I did try:
>
> 1. local X11 "emacsclient -c -s test"
> 2. local X11 "emacsclient -nw -s test"
> 3. remote (over ssh -X) "emacsclient -c -s test"
> 4. remote (over ssh -X) "emacsclient -nw -s test"
>
> against "emacs -Q --fg-daemon=test".  In each case, with this patch, the
> key sequence C-x 5 0 exits the frame without issue, and (for tests 3 and
> 4) C-d exits the SSH session (returns me to my local shell) without my
> having to press C-c.  Without my patch, test 3 does result in SSH
> refusing to exit.
>
> And, even with my patch, for test case 3, using C-x C-c to delete the
> frame still results in SSH refusing to exit.  (It would be nice to fix
> this case too, but I always use C-x 5 0, so I wanted to start by trying
> to fix it.)
>
> Thomas

I suggest configuring Emacs with --with-x-toolkit=no (as is recommended
for users who connect to remote display servers to begin with).