Subject: Re: bug#13007: 24.3.50; emacs_backtrace.txt

From: Dmitry Antipov <[email-masked]>
Date: Thu, 29 Nov 2012 21:23:37 +0400

On 11/29/2012 08:46 PM, Eli Zaretskii wrote:

> For starters, can you tell what triggered the assertion violation in
> Juanma's case?  IOW, how did we wind up in a situation where (AFAIU)
> the selected window displays a buffer other than the current one?

IIUC, here is the sequence:

Function set_window_buffer (W, B, ...) is called where W is selected_window
and XBUFFER (B) != current_buffer. This function temporary sets current
buffer to XBUFFER (B) to run hooks, and then restore old current_buffer [1].
So, on exit we have XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer,
and these gets _finally_ synchronized only when read_key_sequence is called with
fix_current_buffer == true [2]. If redisplay is invoked between [1] and [2],
its routines may see the condition which was eassert'ed; _finally_ means
that some redisplay routines may do the synchronization temporary and
then restore original value of current buffer (see pos_visible_p for example).

Dmitry