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

From: Michael Welsh Duggan <[email-masked]>
Date: Tue, 06 Apr 2021 22:22:03 -0400

Michael Welsh Duggan <[email-masked]> writes:

> martin rudalics <[email-masked]> writes:
>
>>  >> The mysterious aspect is (2): Why did window_list skip the *Server*
>>  >> window?
>>  >
>>  > Good question.  I plan to set Vwindow_list to nil and call it to see
>>  > what happens.
>>
>> This should resolve the mystery.
>
> I wish it did.  After doing this, Vwindow_list has six entries, one for
> each selected_window on each frame, and one for each minibuffer window
> on each frame.  This includes the "*Server*" buffer.

Just a shot in the dark here.  The only way I can think of this
occurring (Vwindow_list being too small), is that something modified
Vwindow_list when we don't expect it to be modified.  I looked through
all the uses of Vwindow_list and window_list(), and they all look
kosher.  The only modification seems to be setting Vwindow_list to nil.
But window_list() does call into lisp (nconc2, which calls Fnconc) when
constructing Vwindow_list, and it uses Vwindow_list as a temporary in
the process.  Is it possible that during that call something happens
asynchronously (via gc?) that calls something that sets Vwindow_list
to nil again, while Vwindow_list is being constructed?  I don't think
so, off hand, but I'm grasping at straws.

-- 
Michael Welsh Duggan
([email-masked])