Subject: bug#891: 23.0.60; Emacs aborts after buffer-swap-text

From: Jason Rumney <[email-masked]>
Date: Fri, 05 Sep 2008 07:06:57 +0800

merge 891 716
reassign 716 emacs
reassign 805 emacs
thanks

Stephen Berman wrote:
> 1. emacs -Q
> 2. Load the library tabbar.el, available from
> http://emhacks.cvs.sourceforge.net/emhacks/emhacks/tabbar.el?revision=1.69&view=markup
> 3. M-x tabbar-mode
> 4. M-: (buffer-swap-text (get-buffer "*Messages*"))
> 5. C-c C-right (tabbar-forward)
>    ==> Emacs aborts
>   

This seems to be the same bug as has been happening with tar-mode on 
Windows since tar-mode was changed to use buffer-swap-text. So the 
underlying bug is not platform specific after all. Do you also get 
crashes when opening tar files in Emacs?

> The full backtrace is below.  According to the Lisp backtrace, the abort
> occurs during or after switch-to-buffer.  Yet typing C-x b after step 4
> above does not make Emacs abort.  Moreover, when I directly call any of
> the tabbar.el functions listed in the backtrace and step through them
> with edebug, this also fails to make Emacs abort.  Yet the above recipe
> is reliably reproducible.  
>
> (Since the abort occurs in unshow_buffer, my guess, based on a comment
> at line 8314 of xdisp.c, is that switch-to-buffer needs to have
> something like the code in with_echo_area_buffer that changes w->pointm.
> I guess this would go after the call to Fset_buffer in switch-to-buffer,
> but I don't know how to write the code.)
>   

Can this be done in Fbuffer_swap_text, rather than expecting other code 
to clean up after the fact? Some of the crashes I've seen while 
debugging this have not involved switch-to-buffer, so there are probably 
many other locations where this clean up code needs to go if it can't be 
done in Fbuffer_swap_text for some reason.