Subject: Re: bug#48337: Fwd: 28.0.50; Emacs crashing randomly (possibly minibuffer activity related)

From: Alex Bennée <[email-masked]>
Date: Tue, 11 May 2021 23:07:01 +0100

Alan Mackenzie <[email-masked]> writes:

> Hello, Alex.
>
> On Tue, May 11, 2021 at 07:51:20 +0100, Alex Bennée wrote:
>> I can now recreate at will with a magit sequence (l o hackbox/ TAB) which
>> triggers a minibuffer re-size to accommodate the list of git branches:
>
> Could you possibly give us a precise recipe to reproduce this bug, and a
> GDB backtrace with Emacs compiled with CFLAGS='-O0 g3' (or similar)?  So
> much of the needed information in your large dump post has been
> optimised away by the compiler.  Would you please also make sure that
> the Lisp backtrace is at the end of the GDB backtrace.  I think this
> should happen automatically if you have an Emacs .gdbinit in the
> directory where you start GDB from.

The later rr dumps have more symbols but didn't have the benefit of the
Emacs' .gdbinit Lips backtrace. However I'm fairly confident it's being
triggered by doom-modeline:

  (doom-modeline-def-segment window-number
    (let ((num (cond
                ((bound-and-true-p ace-window-display-mode)
                 (aw-update)
                 (window-parameter (selected-window) 'ace-window-path))
                ((bound-and-true-p winum-mode)
                 (setq winum-auto-setup-mode-line nil)
                 (winum-get-number-string))
                ((bound-and-true-p window-numbering-mode)
                 (window-numbering-get-number-string))
                (t ""))))
      (if (and (< 0 (length num))
               (< (if (active-minibuffer-window) 2 1) ; exclude minibuffer
                  (length (cl-mapcan
                           (lambda (frame)
                             ;; Exclude child frames
                             (unless (and (fboundp 'frame-parent)
                                          (frame-parent frame))
                               (window-list)))
                           (visible-frame-list)))))
          (propertize (format " %s " num)
                      'face (if (doom-modeline--active)
                                'doom-modeline-buffer-major-mode
                              'mode-line-inactive)))))

I'll try and get a better capture of it in action next time I restart my Emacs.

>
> That Factive_minibuffer_window is throwing an error is mainly because it
> is being invalidly called.  In particular, the variable minibuf_level
> appears to be invalid, as compared with the internal list of
> minibuffers.
>
> Would you please also test my theory of the last paragraph, by applying
> the following patch (which reverses Eli's recent patch) and seeing if
> the bug still happens.  Thanks!
>
>
>
> diff --git a/src/minibuf.c b/src/minibuf.c
> index 52d1275451..3afba0db68 100644
> --- a/src/minibuf.c
> +++ b/src/minibuf.c
> @@ -653,6 +653,7 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt,
>      }
>  
>    minibuf_level++;         /* Before calling choose_minibuf_frame.  */
> +  minibuffer = get_minibuffer (minibuf_level); /* Temporary fix, 2021-05-11. */
>  
>    /* Choose the minibuffer window and frame, and take action on them.  */
>  
> @@ -766,7 +767,8 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, Lisp_Object prompt,
>  
>    /* Switch to the minibuffer.  */
>  
> -  minibuffer = get_minibuffer (minibuf_level);
> +  /* minibuffer = get_minibuffer (minibuf_level); Temporarily moved,
> +     2021-05-11. */
>    set_minibuffer_mode (minibuffer, minibuf_level);
>    Fset_buffer (minibuffer);
>  
> @@ -969,8 +971,8 @@ is_minibuffer (EMACS_INT depth, Lisp_Object buf)
>  nth_minibuffer (EMACS_INT depth)
>  {
>    Lisp_Object tail = Fnthcdr (make_fixnum (depth), Vminibuffer_list);
> -  if (NILP (tail))
> -    return Qnil;
> +  /*  if (NILP (tail)) Temporarily commented out, 2021-05-11
> +      return Qnil; */
>    return XCAR (tail);
>  }
>  
>
> [ .... ]
>
>> Let me know if you want something else.
>
> See above.  ;-)
>
> [ .... ]
>
>> On Tue, 11 May 2021 at 03:24, Eli Zaretskii <[email-masked]> wrote:
>
>> > Please show the Lisp value of Vminibuffer_list.
>
> I have seen the answer to this request.  Thanks!
>
>> -- 
>> Alex Bennée
>> KVM/QEMU Hacker for Linaro

-- 
Alex Bennée