(Fgarbage_collect): Shrink buffer gaps that are
excessively large.
This commit is contained in:
parent
8af5b8e71f
commit
e0fead5d9f
2 changed files with 29 additions and 1 deletions
|
@ -1,3 +1,13 @@
|
|||
2001-12-05 Andrew Innes <andrewi@gnu.org>
|
||||
|
||||
* alloc.c (Fgarbage_collect): Shrink buffer gaps that are
|
||||
excessively large.
|
||||
|
||||
* insdel.c (make_gap_larger): New function.
|
||||
(make_gap_smaller): New function.
|
||||
(make_gap) [USE_MMAP_FOR_BUFFERS || REL_ALLOC]: Call
|
||||
make_gap_smaller if arg is negative.
|
||||
|
||||
2001-12-04 Stefan Monnier <monnier@cs.yale.edu>
|
||||
|
||||
* keyboard.c (kbd_buffer_store_event): Fix interrupt_signal prototype.
|
||||
|
|
20
src/alloc.c
20
src/alloc.c
|
@ -1020,7 +1020,7 @@ make_number (n)
|
|||
|
||||
/* Lisp_Strings are allocated in string_block structures. When a new
|
||||
string_block is allocated, all the Lisp_Strings it contains are
|
||||
added to a free-list stiing_free_list. When a new Lisp_String is
|
||||
added to a free-list string_free_list. When a new Lisp_String is
|
||||
needed, it is taken from that list. During the sweep phase of GC,
|
||||
string_blocks that are entirely free are freed, except two which
|
||||
we keep.
|
||||
|
@ -4096,6 +4096,24 @@ Garbage collection happens automatically if you cons more than
|
|||
nextb->undo_list
|
||||
= truncate_undo_list (nextb->undo_list, undo_limit,
|
||||
undo_strong_limit);
|
||||
|
||||
/* Shrink buffer gaps, but skip indirect and dead buffers. */
|
||||
if (nextb->base_buffer == 0 && !NILP (nextb->name))
|
||||
{
|
||||
/* If a buffer's gap size is more than 10% of the buffer
|
||||
size, or larger than 2000 bytes, then shrink it
|
||||
accordingly. Keep a minimum size of 20 bytes. */
|
||||
int size = min (2000, max (20, (nextb->text->z_byte / 10)));
|
||||
|
||||
if (nextb->text->gap_size > size)
|
||||
{
|
||||
struct buffer *save_current = current_buffer;
|
||||
current_buffer = nextb;
|
||||
make_gap (-(nextb->text->gap_size - size));
|
||||
current_buffer = save_current;
|
||||
}
|
||||
}
|
||||
|
||||
nextb = nextb->next;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue