Commit f0863a54 authored by Dmitry Antipov's avatar 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.
parent ab1dc14b
2012-10-17 Dmitry Antipov <dmantipov@yandex.ru>
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 <dmantipov@yandex.ru> 2012-10-16 Dmitry Antipov <dmantipov@yandex.ru>
* alloc.c (Fmake_byte_code): Fix typo in comment. * alloc.c (Fmake_byte_code): Fix typo in comment.
......
...@@ -1663,18 +1663,11 @@ No argument or nil as argument means do this for the current buffer. */) ...@@ -1663,18 +1663,11 @@ No argument or nil as argument means do this for the current buffer. */)
void void
compact_buffer (struct buffer *buffer) compact_buffer (struct buffer *buffer)
{ {
/* Verify indirection counters. */ BUFFER_CHECK_INDIRECTION (buffer);
if (buffer->base_buffer)
{
eassert (buffer->indirections == -1);
eassert (buffer->base_buffer->indirections > 0);
}
else
eassert (buffer->indirections >= 0);
/* Skip dead buffers, indirect buffers and buffers /* Skip dead buffers, indirect buffers and buffers
which aren't changed since last compaction. */ which aren't changed since last compaction. */
if (!NILP (buffer->INTERNAL_FIELD (name)) if (BUFFER_LIVE_P (buffer)
&& (buffer->base_buffer == NULL) && (buffer->base_buffer == NULL)
&& (buffer->text->compact != buffer->text->modiff)) && (buffer->text->compact != buffer->text->modiff))
{ {
...@@ -2114,6 +2107,8 @@ set_buffer_internal_1 (register struct buffer *b) ...@@ -2114,6 +2107,8 @@ set_buffer_internal_1 (register struct buffer *b)
if (current_buffer == b) if (current_buffer == b)
return; return;
BUFFER_CHECK_INDIRECTION (b);
old_buf = current_buffer; old_buf = current_buffer;
current_buffer = b; current_buffer = b;
last_known_column_point = -1; /* invalidate indentation cache */ last_known_column_point = -1; /* invalidate indentation cache */
......
...@@ -963,6 +963,22 @@ bset_width_table (struct buffer *b, Lisp_Object val) ...@@ -963,6 +963,22 @@ bset_width_table (struct buffer *b, Lisp_Object val)
#define BUFFER_LIVE_P(b) (!NILP (BVAR (b, name))) #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. */ /* Chain of all buffers, including killed ones. */
extern struct buffer *all_buffers; extern struct buffer *all_buffers;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment