From: Dmitry Antipov Date: Wed, 17 Oct 2012 04:58:15 +0000 (+0400) Subject: Do not verify indirection counters of killed buffers (Bug#12579). X-Git-Tag: emacs-24.2.90~233^2~3 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f0863a54681cfe7d40a0844bd2ce812eed408002;p=emacs.git Do not verify indirection counters of killed buffers (Bug#12579). * buffer.h (BUFFER_CHECK_INDIRECTION): New macro. * buffer.c (compact_buffer, set_buffer_internal_1): Use it. --- diff --git a/src/ChangeLog b/src/ChangeLog index 3c62dffc3e0..bea7c9331db 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-10-17 Dmitry Antipov + + Do not verify indirection counters of killed buffers (Bug#12579). + * buffer.h (BUFFER_CHECK_INDIRECTION): New macro. + * buffer.c (compact_buffer, set_buffer_internal_1): Use it. + 2012-10-16 Dmitry Antipov * alloc.c (Fmake_byte_code): Fix typo in comment. diff --git a/src/buffer.c b/src/buffer.c index 861a89b5a0f..8e77db66d43 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1663,18 +1663,11 @@ No argument or nil as argument means do this for the current buffer. */) void compact_buffer (struct buffer *buffer) { - /* Verify indirection counters. */ - if (buffer->base_buffer) - { - eassert (buffer->indirections == -1); - eassert (buffer->base_buffer->indirections > 0); - } - else - eassert (buffer->indirections >= 0); + BUFFER_CHECK_INDIRECTION (buffer); /* Skip dead buffers, indirect buffers and buffers which aren't changed since last compaction. */ - if (!NILP (buffer->INTERNAL_FIELD (name)) + if (BUFFER_LIVE_P (buffer) && (buffer->base_buffer == NULL) && (buffer->text->compact != buffer->text->modiff)) { @@ -2114,6 +2107,8 @@ set_buffer_internal_1 (register struct buffer *b) if (current_buffer == b) return; + BUFFER_CHECK_INDIRECTION (b); + old_buf = current_buffer; current_buffer = b; last_known_column_point = -1; /* invalidate indentation cache */ diff --git a/src/buffer.h b/src/buffer.h index d18ef30ea38..9e0e9eef0b1 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -963,6 +963,22 @@ bset_width_table (struct buffer *b, Lisp_Object val) #define BUFFER_LIVE_P(b) (!NILP (BVAR (b, name))) +/* Verify indirection counters. */ + +#define BUFFER_CHECK_INDIRECTION(b) \ + do { \ + if (BUFFER_LIVE_P (b)) \ + { \ + if (b->base_buffer) \ + { \ + eassert (b->indirections == -1); \ + eassert (b->base_buffer->indirections > 0); \ + } \ + else \ + eassert (b->indirections >= 0); \ + } \ + } while (0) + /* Chain of all buffers, including killed ones. */ extern struct buffer *all_buffers;