all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* 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 external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.