Subject: Re: bug#47244: 28.0.50; SIGSEGV in long-runnning Emacs

From: Eli Zaretskii <[email-masked]>
Date: Tue, 30 Mar 2021 18:13:29 +0300

> Cc: [email-masked], [email-masked], [email-masked], [email-masked]
> From: martin rudalics <[email-masked]>
> Date: Tue, 30 Mar 2021 17:05:14 +0200
> 
>  > Maybe instead of trying to find the exact culprit, we should simply
>  > protect this code:
>  >
>  >        /* Make sure the current window's buffer is selected.  */
>  >        set_buffer_internal (XBUFFER (XWINDOW (selected_window)->contents));
>  >
>  > from selecting a dead buffer?  For example, by using
>  > other_buffer_safely if the selected-window's buffer is dead.
> 
> The problem is that we already detect this situation too late in order
> to tell who the real culprit is.  For example, a dead buffer stored in
> the selected_window's contents field could have been a dead
> current_buffer before.  So for some time we could have been already
> running with a dead buffer in that filed.  Long enough maybe to cause
> havoc elsewhere.  And what happened in between might not have used
> set_buffer_internal but accessed that buffer more directly.

The above code runs every iteration through the main loop, so fixing
it there will go along way towards avoiding the havoc.  Or are you
saying it could cause harm in some situation?