GNU bug report logs - #44644
/tmp/emacs0/ not cleaned up upon exit

Previous Next

Package: emacs;

Reported by: 積丹尼 Dan Jacobson <jidanni <at> jidanni.org>

Date: Sat, 14 Nov 2020 20:31:02 UTC

Severity: wishlist

Tags: fixed

Fixed in version 28.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: 44644 <at> debbugs.gnu.org, jidanni <at> jidanni.org
Subject: bug#44644: /tmp/emacs0/ not cleaned up upon exit
Date: Tue, 24 Nov 2020 17:28:09 +0200
> From: Lars Ingebrigtsen <larsi <at> gnus.org>
> Cc: jidanni <at> jidanni.org,  44644 <at> debbugs.gnu.org
> Date: Tue, 24 Nov 2020 06:42:47 +0100
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> >> True.  Looking at the code, it looks like having `server-start' add
> >> `server-force-delete' to `kill-emacs-query-functions' would do the
> >> trick?
> >> 
> >> Does anybody see any downsides to doing that?
> >
> > What if the Emacs that's being killed is not the one that created the
> > server file?
> 
> I didn't read the code closely enough -- emacs-server already does this,
> but only deletes the /tmp/emacs0/server socket, but leaves the directory
> behind.  As you say, there may be more than one server (with different
> names), so deleting the directory may fail, but the final Emacs that
> exits should successfully delete directory, at least, and I've added
> that to Emacs 28.

Wait a moment: we are deleting the _directory_ of the server file?
Sorry, I was confused and thought you were talking about the server
file itself.

The directory thing is different.  First, its place and purpose
depends on whether server-use-tcp is nil (Posix platforms) or not
(MS-Windows or when the user of a Posix host connects from another
system).  If this is non-nil, the directory of the server file is
server-auth-dir, which is:

  (defcustom server-auth-dir (locate-user-emacs-file "server/")

Since this is a defcustom, I don't think we can delete that directory
behind user's back, even if it is empty.

If server-use-tcp is nil (the default), then the directory of
server-file is computed thusly:

  (defvar server-socket-dir
    (if internal--daemon-sockname
	(file-name-directory internal--daemon-sockname)
      (and (featurep 'make-network-process '(:family local))
	   (let ((xdg_runtime_dir (getenv "XDG_RUNTIME_DIR")))
	     (if xdg_runtime_dir
		 (format "%s/emacs" xdg_runtime_dir)
	       (format "%s/emacs%d" (or (getenv "TMPDIR") "/tmp") (user-uid))))))

I don't think it's kosher to delete $XDG_RUNTIME_DIR, even if it's
empty, since it is probably used by more than the server?  And if
XDG_RUNTIME_DIR is not defined, and we use a directory under /tmp,
then the system cleans that up from time to time, doesn't it?

So bottom line, I don't think we should do this, at least not
unconditionally.




This bug report was last modified 4 years and 180 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.