Commit a98a91ac authored by Paul Eggert's avatar Paul Eggert
Browse files

Fix bug with clang + directory_files_internal + GC.

* src/dired.c (directory_files_internal): Use a volatile variable
to prevent the compiler from optimizing away all copies of a local.
I wonder how many other GC-related bugs like this lurk elsewhere?

Fixes: debbugs:16986
parent 7f0ff25b
2014-08-02 Paul Eggert <eggert@cs.ucla.edu>
Fix bug with clang + directory_files_internal + GC (Bug#16986).
* dired.c (directory_files_internal): Use a volatile variable
to prevent the compiler from optimizing away all copies of a local.
I wonder how many other GC-related bugs like this lurk elsewhere?
Avoid 100% CPU utilization on ssh session exit (Bug#17691).
* xterm.h (struct x_display_info): New member 'connection'.
* xterm.c (x_term_init, x_delete_terminal): Set and use it,
......
......@@ -150,6 +150,12 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
Lisp_Object w32_save = Qnil;
#endif
/* Don't let the compiler optimize away all copies of DIRECTORY,
which would break GC; see Bug#16986. Although this is required
only in the common case where GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS,
it shouldn't break anything in the other cases. */
Lisp_Object volatile directory_volatile = directory;
/* Because of file name handlers, these functions might call
Ffuncall, and cause a GC. */
list = encoded_directory = dirfilename = Qnil;
......@@ -325,6 +331,7 @@ directory_files_internal (Lisp_Object directory, Lisp_Object full,
list = Fsort (Fnreverse (list),
attrs ? Qfile_attributes_lessp : Qstring_lessp);
(void) directory_volatile;
RETURN_UNGCPRO (list);
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment