From 3e98c68e76fe07280e82cd394008fdcbe1ce59fa Mon Sep 17 00:00:00 2001
From: Dmitry Antipov <dmantipov@yandex.ru>
Date: Wed, 10 Oct 2012 18:45:07 +0400
Subject: [PATCH] * alloc.c (gc_sweep): Use pointer-to-a-pointer loop for
 buffers.

---
 src/ChangeLog |  4 ++++
 src/alloc.c   | 13 ++++---------
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index dedf10b8e2d..71465cc9b86 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2012-10-10  Dmitry Antipov  <dmantipov@yandex.ru>
+
+	* alloc.c (gc_sweep): Use pointer-to-a-pointer loop for buffers.
+
 2012-10-10  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* commands.h (immediate_quit): Remove duplicate decl.
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;
 	}
   }
 
-- 
2.39.5