Subject: Re: bug#19636: [TRAMP] global minor mode hangs connection when accessing files in :lighter

From: Michael Albinus <[email-masked]>
Date: Wed, 21 Jan 2015 17:15:14 +0100

Philippe Vaucher <[email-masked]> writes:

> Hello,

Hi Philippe,

> TRAMP hangs the connection for any new processes in both emacs 24.4
> and emacs from the master branch when a global minor mode uses a
> :lighter which evals `(file-truename default-directory)`.
>
> To reproduce:
>
> M-x find-file buggy-tramp-mode.el
> M-x eval-buffer
> M-x global-buggy-tramp-mode
> M-x find-file /scpx:user@host:/tmp/foo.txt
> M-x async-shell-command ls
>
> The last command (new process) doens't complete and the TRAMP buffer
> shows "Are you awake?". My understanding of the problem is that
> `file-truename` tries to use a not-yet-ready TRAMP connection.

I tried it seriously with several combinations of Tramp parameter
settings; I couldn't reproduce. However, it is dangerous to run
an asynchronous process in parallel to retrieve information via
Tramp. While you run an asynchronous process, Tramp opens a
second connection and remembers this channel. In parallel,
file-truename needs also to retrieve information fron the remote
machine, on the other connection channel. Likely, Tramp might
confuse which connection channel to use.

Maybe you can set tramp-verbose to 6, and rerun your test. The resulting
Tramp trace buffer shall tell us what's up.

> To work around that was tried is to use `tramp-connectable-p` or even
> `file-remote-p` with the appropriate flags, but they both
> (incorrectly?) return true.

(setq buggy-tramp-mode-lighter
      '(:eval (format " Projectile[%s]"
		      (if (file-remote-p default-directory)
			  default-directory
			(file-truename default-directory)))))

> Thanks,
> Philippe

Best regards, Michael.