emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r108863: * buffer.c (init_buffer_once


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r108863: * buffer.c (init_buffer_once): Fix initialization of
Date: Wed, 04 Jul 2012 19:49:46 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 108863
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Wed 2012-07-04 19:49:46 +0400
message:
  * buffer.c (init_buffer_once):  Fix initialization of
  headers for buffer_defaults and buffer_local_symbols.
  Reported by Juanma Barranquero <address@hidden>.
modified:
  src/ChangeLog
  src/buffer.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-07-04 14:38:02 +0000
+++ b/src/ChangeLog     2012-07-04 15:49:46 +0000
@@ -1,3 +1,9 @@
+2012-07-04  Dmitry Antipov  <address@hidden>
+
+       * buffer.c (init_buffer_once):  Fix initialization of
+       headers for buffer_defaults and buffer_local_symbols.
+       Reported by Juanma Barranquero <address@hidden>.
+
 2012-07-04  Stefan Monnier  <address@hidden>
 
        Turn VECTOR_FREE_LIST_FLAG into PVEC_FREE.

=== modified file 'src/buffer.c'
--- a/src/buffer.c      2012-07-04 05:39:36 +0000
+++ b/src/buffer.c      2012-07-04 15:49:46 +0000
@@ -4870,6 +4870,12 @@
 init_buffer_once (void)
 {
   int idx;
+  /* If you add, remove, or reorder Lisp_Objects in a struct buffer, make
+     sure that this is still correct.  Otherwise, mark_vectorlike may not
+     trace all Lisp_Objects in buffer_defaults and buffer_local_symbols.  */
+  const int pvecsize 
+    = (offsetof (struct buffer, own_text) - sizeof (struct vectorlike_header))
+    / sizeof (Lisp_Object);
 
   memset (buffer_permanent_local_flags, 0, sizeof 
buffer_permanent_local_flags);
 
@@ -4886,9 +4892,9 @@
   buffer_local_symbols.text = &buffer_local_symbols.own_text;
   BUF_INTERVALS (&buffer_defaults) = 0;
   BUF_INTERVALS (&buffer_local_symbols) = 0;
-  XSETPVECTYPESIZE (&buffer_defaults, PVEC_BUFFER, 0);
+  XSETPVECTYPESIZE (&buffer_defaults, PVEC_BUFFER, pvecsize);
   XSETBUFFER (Vbuffer_defaults, &buffer_defaults);
-  XSETPVECTYPESIZE (&buffer_local_symbols, PVEC_BUFFER, 0);
+  XSETPVECTYPESIZE (&buffer_local_symbols, PVEC_BUFFER, pvecsize);
   XSETBUFFER (Vbuffer_local_symbols, &buffer_local_symbols);
 
   /* Set up the default values of various buffer slots.  */


reply via email to

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