* bug#18232: 24.3.92; Filename completion changes the current working directory
@ 2014-08-09 19:56 Harald Hanche-Olsen
2014-08-10 2:45 ` Glenn Morris
0 siblings, 1 reply; 6+ messages in thread
From: Harald Hanche-Olsen @ 2014-08-09 19:56 UTC (permalink / raw)
To: 18232
C-x C-f (find-file) with filename completion changes the current
working directory (cwd) of emacs.
This is annoying for the following reason:
If you temporarily mount a filesystem and then visit a file in that
filesystem, you cannot unmount the filesystem because it is now the
cwd of a running process.
The obvious workaround is to first visit a file not in this
filesystem, but that is annoying and should be unnecessary.
I have narrowed the cause down to filename completion:
Starting with emacs -Q:
- Find the PID of the running emacs process.
- In a root shell, run “lsof -p PID | grep cwd”.
- Evaluate (read-file-name-default "Filename: ") and don't hit RETURN
- Navigate to some other directory, and cause filename completion to
happen. For example, type “/tmp/” and follow up with TAB.
- Run the lsof command again, and note that the current working
directory has changed.
In GNU Emacs 24.3.92.2 (x86_64-apple-darwin13.3.0, NS apple-appkit-1265.21)
of 2014-08-08 on airy
Windowing system distributor `Apple', version 10.3.1265
Configured using:
`configure --with-ns'
Important settings:
value of $LC_CTYPE: en_US.UTF-8
value of $LANG: C
locale-coding-system: utf-8-unix
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18232: 24.3.92; Filename completion changes the current working directory
2014-08-09 19:56 bug#18232: 24.3.92; Filename completion changes the current working directory Harald Hanche-Olsen
@ 2014-08-10 2:45 ` Glenn Morris
2014-08-10 8:03 ` Harald Hanche-Olsen
0 siblings, 1 reply; 6+ messages in thread
From: Glenn Morris @ 2014-08-10 2:45 UTC (permalink / raw)
To: Harald Hanche-Olsen; +Cc: 18232
Harald Hanche-Olsen wrote:
> Starting with emacs -Q:
>
> - Find the PID of the running emacs process.
> - In a root shell, run "lsof -p PID | grep cwd".
> - Evaluate (read-file-name-default "Filename: ") and don't hit RETURN
> - Navigate to some other directory, and cause filename completion to
> happen. For example, type "/tmp/" and follow up with TAB.
> - Run the lsof command again, and note that the current working
> directory has changed.
I can't reproduce that on GNU/Linux.
In general, if you visit files and then unmount the hosting
filesystems, you are going to have problems.
> In GNU Emacs 24.3.92.2 (x86_64-apple-darwin13.3.0, NS apple-appkit-1265.21)
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18232: 24.3.92; Filename completion changes the current working directory
2014-08-10 2:45 ` Glenn Morris
@ 2014-08-10 8:03 ` Harald Hanche-Olsen
2014-08-10 13:02 ` Jan Djärv
0 siblings, 1 reply; 6+ messages in thread
From: Harald Hanche-Olsen @ 2014-08-10 8:03 UTC (permalink / raw)
To: rgm; +Cc: 18232
[Glenn Morris <rgm@gnu.org> (2014-08-10 02:45:48 UTC)]
> I can't reproduce that on GNU/Linux.
So it's OS X specific, then.
I suspected it might be; thanks for checking it out.
> In general, if you visit files and then unmount the hosting
> filesystems, you are going to have problems.
Only if you unmount before saving your changes.
Why would you do that?
(I do this several times a week, typically to edit a file on some web
server. I mount the filesystems using sshfs. It is not practical to
leave them mounted, as this is a laptop and moves about a lot.)
– Harald
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18232: 24.3.92; Filename completion changes the current working directory
2014-08-10 8:03 ` Harald Hanche-Olsen
@ 2014-08-10 13:02 ` Jan Djärv
2014-08-10 21:08 ` Paul Eggert
0 siblings, 1 reply; 6+ messages in thread
From: Jan Djärv @ 2014-08-10 13:02 UTC (permalink / raw)
To: Harald Hanche-Olsen; +Cc: 18232, Paul Eggert
Hello.
10 aug 2014 kl. 10:03 skrev Harald Hanche-Olsen <hanche@math.ntnu.no>:
> [Glenn Morris <rgm@gnu.org> (2014-08-10 02:45:48 UTC)]
>
>> I can't reproduce that on GNU/Linux.
>
> So it's OS X specific, then.
>
> I suspected it might be; thanks for checking it out.
It is a bug introduced by bringing in GNULib. The GNULib in Emacs makes wrong assumptions, from lib/save-cwd.h:
/* Gnulib needs to save and restore the current working directory to
fully emulate functions like fstatat. But Emacs doesn't care what
the current working directory is; it always uses absolute file
names. This module replaces the Gnulib module by omitting the code
that Emacs does not need. */
Given that fchdir is called many times per file when completing, no wonder the current working directory gets screwed up.
This bug needs to be fixed in the GNULib code, by really use restore_cwd as it was intended and not make false assumptions and take shortcuts like this:
SAVE_CWD_INLINE int restore_cwd (struct saved_cwd const *cwd) { return 0; }
Jan D.
>> In general, if you visit files and then unmount the hosting
>> filesystems, you are going to have problems.
>
> Only if you unmount before saving your changes.
> Why would you do that?
>
> (I do this several times a week, typically to edit a file on some web
> server. I mount the filesystems using sshfs. It is not practical to
> leave them mounted, as this is a laptop and moves about a lot.)
>
> – Harald
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18232: 24.3.92; Filename completion changes the current working directory
2014-08-10 13:02 ` Jan Djärv
@ 2014-08-10 21:08 ` Paul Eggert
2014-08-11 5:06 ` Jan Djärv
0 siblings, 1 reply; 6+ messages in thread
From: Paul Eggert @ 2014-08-10 21:08 UTC (permalink / raw)
To: Jan Djärv, Harald Hanche-Olsen; +Cc: 18232-done
Jan Djärv wrote:
> This bug needs to be fixed in the GNULib code, by really use restore_cwd as it was intended
Just to clarify, the bug is Emacs's little substitute for Gnulib, not in
Gnulib itself. Perhaps at some point Emacs should just use Gnulib here,
but for now it's safer to migrate a bit more of Gnulib into Emacs to
avoid this regression. I reproduced the problem on Fedora 20 by
building an Emacs that was crippled to not use readlinkat etc., and
installed a patch that worked for me as emacs-24 bzr 117437 (simplified
in 117438).
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18232: 24.3.92; Filename completion changes the current working directory
2014-08-10 21:08 ` Paul Eggert
@ 2014-08-11 5:06 ` Jan Djärv
0 siblings, 0 replies; 6+ messages in thread
From: Jan Djärv @ 2014-08-11 5:06 UTC (permalink / raw)
To: Paul Eggert; +Cc: Harald Hanche-Olsen, 18232-done
10 aug 2014 kl. 23:08 skrev Paul Eggert <eggert@cs.ucla.edu>:
> Jan Djärv wrote:
>> This bug needs to be fixed in the GNULib code, by really use restore_cwd as it was intended
>
> Just to clarify, the bug is Emacs's little substitute for Gnulib, not in Gnulib itself. Perhaps at some point Emacs should just use Gnulib here, but for now it's safer to migrate a bit more of Gnulib into Emacs to avoid this regression. I reproduced the problem on Fedora 20 by building an Emacs that was crippled to not use readlinkat etc., and installed a patch that worked for me as emacs-24 bzr 117437 (simplified in 117438).
Confirmed OK on OSX as well.
Jan D.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-08-11 5:06 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-09 19:56 bug#18232: 24.3.92; Filename completion changes the current working directory Harald Hanche-Olsen
2014-08-10 2:45 ` Glenn Morris
2014-08-10 8:03 ` Harald Hanche-Olsen
2014-08-10 13:02 ` Jan Djärv
2014-08-10 21:08 ` Paul Eggert
2014-08-11 5:06 ` Jan Djärv
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).