[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r110008: Function to mark objects and
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r110008: Function to mark objects and remove killed buffers at once. |
Date: |
Thu, 13 Sep 2012 09:18:26 +0400 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 110008
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Thu 2012-09-13 09:18:26 +0400
message:
Function to mark objects and remove killed buffers at once.
* alloc.c (discard_killed_buffers): Rename to ...
(mark_discard_killed buffers) ... new name. Add marking
of remaining objects. Fix comment. Adjust users.
(mark_object): Do not touch frame buffer lists here.
* frame.c (delete_frame): Reset frame buffer lists here.
modified:
src/ChangeLog
src/alloc.c
src/frame.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2012-09-13 04:14:33 +0000
+++ b/src/ChangeLog 2012-09-13 05:18:26 +0000
@@ -1,3 +1,12 @@
+2012-09-13 Dmitry Antipov <address@hidden>
+
+ Function to mark objects and remove killed buffers at once.
+ * alloc.c (discard_killed_buffers): Rename to ...
+ (mark_discard_killed buffers) ... new name. Add marking
+ of remaining objects. Fix comment. Adjust users.
+ (mark_object): Do not touch frame buffer lists here.
+ * frame.c (delete_frame): Reset frame buffer lists here.
+
2012-09-13 Paul Eggert <address@hidden>
Better workaround for GNOME bug when --enable-gcc-warnings.
=== modified file 'src/alloc.c'
--- a/src/alloc.c 2012-09-11 20:35:23 +0000
+++ b/src/alloc.c 2012-09-13 05:18:26 +0000
@@ -5865,16 +5865,16 @@
mark_buffer (buffer->base_buffer);
}
-/* Remove killed buffers or items whose car is a killed buffer
- from LIST and return changed LIST. Called during GC. */
+/* Remove killed buffers or items whose car is a killed buffer from
+ LIST, and mark other items. Return changed LIST, which is marked. */
static Lisp_Object
-discard_killed_buffers (Lisp_Object list)
+mark_discard_killed_buffers (Lisp_Object list)
{
- Lisp_Object *prev = &list;
- Lisp_Object tail;
+ Lisp_Object tail, *prev = &list;
- for (tail = list; CONSP (tail); tail = XCDR (tail))
+ for (tail = list; CONSP (tail) && !CONS_MARKED_P (XCONS (tail));
+ tail = XCDR (tail))
{
Lisp_Object tem = XCAR (tail);
if (CONSP (tem))
@@ -5882,7 +5882,11 @@
if (BUFFERP (tem) && !BUFFER_LIVE_P (XBUFFER (tem)))
*prev = XCDR (tail);
else
- prev = &XCDR_AS_LVALUE (tail);
+ {
+ CONS_MARK (XCONS (tail));
+ mark_object (XCAR (tail));
+ prev = &XCDR_AS_LVALUE (tail);
+ }
}
return list;
}
@@ -6023,18 +6027,8 @@
break;
case PVEC_FRAME:
- {
- struct frame *f = (struct frame *) ptr;
-
- /* For live frames, killed buffers are filtered out by
- store_frame_param. For dead frames, we do it here in
- attempt to help GC to reclaim killed buffers faster. */
- if (!FRAME_LIVE_P (f))
- fset_buffer_list (f, discard_killed_buffers (f->buffer_list));
-
- mark_vectorlike (ptr);
- mark_face_cache (f->face_cache);
- }
+ mark_vectorlike (ptr);
+ mark_face_cache (((struct frame *) ptr)->face_cache);
break;
case PVEC_WINDOW:
@@ -6048,9 +6042,9 @@
if (leaf && NILP (w->buffer))
{
wset_prev_buffers
- (w, discard_killed_buffers (w->prev_buffers));
+ (w, mark_discard_killed_buffers (w->prev_buffers));
wset_next_buffers
- (w, discard_killed_buffers (w->next_buffers));
+ (w, mark_discard_killed_buffers (w->next_buffers));
}
mark_vectorlike (ptr);
=== modified file 'src/frame.c'
--- a/src/frame.c 2012-09-04 17:34:54 +0000
+++ b/src/frame.c 2012-09-13 05:18:26 +0000
@@ -1299,6 +1299,11 @@
structures can still refer to it. */
fset_menu_bar_vector (f, Qnil);
+ /* If FRAME's buffer lists contains killed
+ buffers, this helps GC to reclaim them. */
+ fset_buffer_list (f, Qnil);
+ fset_buried_buffer_list (f, Qnil);
+
free_font_driver_list (f);
xfree (f->namebuf);
xfree (f->decode_mode_spec_buffer);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r110008: Function to mark objects and remove killed buffers at once.,
Dmitry Antipov <=