aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorDmitry Antipov2012-09-07 11:05:56 +0400
committerDmitry Antipov2012-09-07 11:05:56 +0400
commitb4fa72f2796476e089a57545e0d6dce912b504d3 (patch)
tree8605646ec13d45ed8920fbbd38c1d327c0762c43 /src/alloc.c
parent30730c93a08089674c0507aa80dc33691badd2df (diff)
downloademacs-b4fa72f2796476e089a57545e0d6dce912b504d3.tar.gz
emacs-b4fa72f2796476e089a57545e0d6dce912b504d3.zip
* alloc.c (mark_buffer): Revert unsafe marking optimization.
(mark_object): Likewise for frame objects.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c48
1 files changed, 15 insertions, 33 deletions
diff --git a/src/alloc.c b/src/alloc.c
index bf7c156d321..aaf2f0846dc 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -5842,29 +5842,23 @@ mark_overlay (struct Lisp_Overlay *ptr)
5842static void 5842static void
5843mark_buffer (struct buffer *buffer) 5843mark_buffer (struct buffer *buffer)
5844{ 5844{
5845 if (NILP (BVAR (buffer, name))) 5845 /* This is handled much like other pseudovectors... */
5846 /* If the buffer is killed, mark just the buffer itself. */ 5846 mark_vectorlike ((struct Lisp_Vector *) buffer);
5847 VECTOR_MARK (buffer);
5848 else
5849 {
5850 /* This is handled much like other pseudovectors... */
5851 mark_vectorlike ((struct Lisp_Vector *) buffer);
5852 5847
5853 /* ...but there are some buffer-specific things. */ 5848 /* ...but there are some buffer-specific things. */
5854 5849
5855 MARK_INTERVAL_TREE (buffer_intervals (buffer)); 5850 MARK_INTERVAL_TREE (buffer_intervals (buffer));
5856 5851
5857 /* For now, we just don't mark the undo_list. It's done later in 5852 /* For now, we just don't mark the undo_list. It's done later in
5858 a special way just before the sweep phase, and after stripping 5853 a special way just before the sweep phase, and after stripping
5859 some of its elements that are not needed any more. */ 5854 some of its elements that are not needed any more. */
5860 5855
5861 mark_overlay (buffer->overlays_before); 5856 mark_overlay (buffer->overlays_before);
5862 mark_overlay (buffer->overlays_after); 5857 mark_overlay (buffer->overlays_after);
5863 5858
5864 /* If this is an indirect buffer, mark its base buffer. */ 5859 /* If this is an indirect buffer, mark its base buffer. */
5865 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer)) 5860 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
5866 mark_buffer (buffer->base_buffer); 5861 mark_buffer (buffer->base_buffer);
5867 }
5868} 5862}
5869 5863
5870/* Determine type of generic Lisp_Object and mark it accordingly. */ 5864/* Determine type of generic Lisp_Object and mark it accordingly. */
@@ -6003,26 +5997,14 @@ mark_object (Lisp_Object arg)
6003 break; 5997 break;
6004 5998
6005 case PVEC_FRAME: 5999 case PVEC_FRAME:
6006 { 6000 mark_vectorlike (ptr);
6007 struct frame *f = (struct frame *) ptr; 6001 mark_face_cache (((struct frame *) ptr)->face_cache);
6008
6009 if (FRAME_LIVE_P (f))
6010 {
6011 mark_vectorlike (ptr);
6012 mark_face_cache (f->face_cache);
6013 }
6014 else
6015 /* If the frame is deleted, mark just the frame itself. */
6016 VECTOR_MARK (ptr);
6017 }
6018 break; 6002 break;
6019 6003
6020 case PVEC_WINDOW: 6004 case PVEC_WINDOW:
6021 { 6005 {
6022 struct window *w = (struct window *) ptr; 6006 struct window *w = (struct window *) ptr;
6023 6007
6024 /* Even if the window is deleted, we can't mark just the window
6025 itself because set-window-configuration can resurrect it. */
6026 mark_vectorlike (ptr); 6008 mark_vectorlike (ptr);
6027 /* Mark glyphs for leaf windows. Marking window 6009 /* Mark glyphs for leaf windows. Marking window
6028 matrices is sufficient because frame matrices 6010 matrices is sufficient because frame matrices