bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: martin rudalics
Subject: bug#47244: 28.0.50; SIGSEGV in long-runnning Emacs
Date: Thu, 8 Apr 2021 17:48:23 +0200

> Okay, close, but not quite.  What seems to be happening is this:
> list_windows()

This is a local rewrite.  You really intend window_list() here.  Right?

> is called while Vwindow_list is nil, and the if branch is
> taken.  Something causes list_windows() to exit without reaching the end
> of the if block.  This leaves Vwindow_list partially created.

OK.  If you really get out of this after the first

          Vwindow_list = nconc2 (Vwindow_list, arglist);

then we have one recorded frame, the length of Vwindow_list is 2 but we
did not record it in the earlier length-based experiment and the 2 won't
show up in the list of lengths.  So the explanation is valid and a bit
gruesome too.  This might hit us anywhere ...

> The next
> time list_windows() is called it returns the partially created list.
>
> To determine this I put a breakpoint at the beginning of the if block
> that sets a gdb convenience variable called $in_list_windows to one and
> continues.  I put a breakpoint at the end of that block that sets it to
> zero and continues.  I put a third condition breakpoint at the entrance
> to list_windows() that only triggers if $in_list_windows is one.  This
> triggered with the included backtrace.
>
> Once again, the state triggered when, due to the VPN state changing, a
> background gnus demon hung trying to fetch mail.  The trigger was me
> hitting C-g twice rapidly in succession to regain interactivity.
>
> Can anyone recommend a means to check if this my theory is true?  Does
> list_windows() need to be protected against quit?

Try with

  block_input ();
  ...
  unblock_input ();

around it.

martin





reply via email to

[Prev in Thread] Current Thread [Next in Thread]