diff options
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 13 |
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) | |||
| 6311 | 6311 | ||
| 6312 | /* Free all unmarked buffers */ | 6312 | /* Free all unmarked buffers */ |
| 6313 | { | 6313 | { |
| 6314 | register struct buffer *buffer = all_buffers, *prev = 0, *next; | 6314 | register struct buffer *buffer, **bprev = &all_buffers; |
| 6315 | 6315 | ||
| 6316 | total_buffers = 0; | 6316 | total_buffers = 0; |
| 6317 | while (buffer) | 6317 | for (buffer = all_buffers; buffer; buffer = *bprev) |
| 6318 | if (!VECTOR_MARKED_P (buffer)) | 6318 | if (!VECTOR_MARKED_P (buffer)) |
| 6319 | { | 6319 | { |
| 6320 | if (prev) | 6320 | *bprev = buffer->header.next.buffer; |
| 6321 | prev->header.next = buffer->header.next; | ||
| 6322 | else | ||
| 6323 | all_buffers = buffer->header.next.buffer; | ||
| 6324 | next = buffer->header.next.buffer; | ||
| 6325 | lisp_free (buffer); | 6321 | lisp_free (buffer); |
| 6326 | buffer = next; | ||
| 6327 | } | 6322 | } |
| 6328 | else | 6323 | else |
| 6329 | { | 6324 | { |
| @@ -6331,7 +6326,7 @@ gc_sweep (void) | |||
| 6331 | /* Do not use buffer_(set|get)_intervals here. */ | 6326 | /* Do not use buffer_(set|get)_intervals here. */ |
| 6332 | buffer->text->intervals = balance_intervals (buffer->text->intervals); | 6327 | buffer->text->intervals = balance_intervals (buffer->text->intervals); |
| 6333 | total_buffers++; | 6328 | total_buffers++; |
| 6334 | prev = buffer, buffer = buffer->header.next.buffer; | 6329 | bprev = &buffer->header.next.buffer; |
| 6335 | } | 6330 | } |
| 6336 | } | 6331 | } |
| 6337 | 6332 | ||