emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs-24 r117421: Fix bug with clang + directory_files_int


From: Paul Eggert
Subject: [Emacs-diffs] emacs-24 r117421: Fix bug with clang + directory_files_internal + GC.
Date: Sat, 02 Aug 2014 22:58:12 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 117421
revision-id: address@hidden
parent: address@hidden
fixes bug: http://debbugs.gnu.org/16986
committer: Paul Eggert <address@hidden>
branch nick: emacs-24
timestamp: Sat 2014-08-02 15:58:09 -0700
message:
  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?
modified:
  src/ChangeLog                  changelog-20091113204419-o5vbwnq5f7feedwu-1438
  src/dired.c                    dired.c-20091113204419-o5vbwnq5f7feedwu-171
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2014-08-02 21:31:18 +0000
+++ b/src/ChangeLog     2014-08-02 22:58:09 +0000
@@ -1,5 +1,10 @@
 2014-08-02  Paul Eggert  <address@hidden>
 
+       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,

=== modified file 'src/dired.c'
--- a/src/dired.c       2014-04-16 13:27:28 +0000
+++ b/src/dired.c       2014-08-02 22:58:09 +0000
@@ -150,6 +150,12 @@
   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 @@
     list = Fsort (Fnreverse (list),
                  attrs ? Qfile_attributes_lessp : Qstring_lessp);
 
+  (void) directory_volatile;
   RETURN_UNGCPRO (list);
 }
 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]