summaryrefslogtreecommitdiff
path: root/src/alloc.c
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2012-10-10 18:45:07 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2012-10-10 18:45:07 +0400
commit3e98c68e76fe07280e82cd394008fdcbe1ce59fa (patch)
tree1ac54dd61456743d5de5087d1d760d9e600a453f /src/alloc.c
parent9d7f027b56081705edabb3e77bb7bd995ccc2fa2 (diff)
* alloc.c (gc_sweep): Use pointer-to-a-pointer loop for buffers.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 3ed8cc2d990..0cbdef84c4a 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6311,19 +6311,14 @@ gc_sweep (void)
/* Free all unmarked buffers */
{
- register struct buffer *buffer = all_buffers, *prev = 0, *next;
+ register struct buffer *buffer, **bprev = &all_buffers;
total_buffers = 0;
- while (buffer)
+ for (buffer = all_buffers; buffer; buffer = *bprev)
if (!VECTOR_MARKED_P (buffer))
{
- if (prev)
- prev->header.next = buffer->header.next;
- else
- all_buffers = buffer->header.next.buffer;
- next = buffer->header.next.buffer;
+ *bprev = buffer->header.next.buffer;
lisp_free (buffer);
- buffer = next;
}
else
{
@@ -6331,7 +6326,7 @@ gc_sweep (void)
/* Do not use buffer_(set|get)_intervals here. */
buffer->text->intervals = balance_intervals (buffer->text->intervals);
total_buffers++;
- prev = buffer, buffer = buffer->header.next.buffer;
+ bprev = &buffer->header.next.buffer;
}
}