Subject: bug#12007: 24.1.50; Crash in auto-revert-handler

From: Dmitry Antipov <[email-masked]>
Date: Sun, 22 Jul 2012 08:11:57 +0400

On 07/21/2012 05:51 PM, Eli Zaretskii wrote:

>> From: Christoph Scholtes <[email-masked]>
>> Date: Sat, 21 Jul 2012 07:17:07 -0600
>>
>> Emacs seems to have crashed while executing the auto-revert-function. I
>> was not working on anything at that moment and Emacs was minimized.
>>
>> Eli, gdb session is available. :)
>
> Thanks, but this looks like a completely different crash, it happened
> inside GC:
>
>> #1  0x0114fabd in w32_abort () at w32fns.c:7183
>>          button = 6
>> #2  0x01041cc6 in die (
>>      msg=0x152fa40 "assertion failed: buffer->base_buffer->indirections > 0",
>>      file=0x152d874 "buffer.c", line=1454) at alloc.c:6701
>> No locals.
>> #3  0x010a9ab1 in compact_buffer (buffer=0x10847c00) at buffer.c:1454
>> No locals.
>> #4  0x0103ef10 in Fgarbage_collect () at alloc.c:5416  <<<<<<<<<<<<<<<<<<<
>
> The failed assertion seems to point to the latest changes which added
> buffer indirection counting.  Dmitry, could you please take a look?
> You can ask Christoph to look around in the crashed session, since it
> is still runs under GDB.

Most probably this is a fix:

=== modified file 'src/buffer.c'
--- src/buffer.c	2012-07-20 16:05:47 +0000
+++ src/buffer.c	2012-07-22 04:08:08 +0000
@@ -2145,6 +2145,7 @@
    swapfield (zv_byte, ptrdiff_t);
    eassert (!current_buffer->base_buffer);
    eassert (!other_buffer->base_buffer);
+  swapfield (indirections, ptrdiff_t);
    current_buffer->clip_changed = 1;	other_buffer->clip_changed = 1;
    swapfield (newline_cache, struct region_cache *);
    swapfield (width_run_cache, struct region_cache *);

Christoph, can you try it?

Dmitry