Subject: Re: bug#30182: Update

From: Eli Zaretskii <[email-masked]>
Date: Tue, 23 Jan 2018 19:25:42 +0200

> From: Sujith <[email-masked]>
> Cc: [email-masked], [email-masked]
> Date: Tue, 23 Jan 2018 22:37:04 +0530
> 
> (gdb) pp elt
> [nil 23143 27373 214334 300 savehist-autosave nil nil 582000]
> 
> (gdb) pp val
> ([nil 23143 27086 157598 nil undo-auto--boundary-timer nil nil 797000] [nil 23143 27086 356582 0.5 blink-cursor-timer-function nil nil 148000] [nil 23143 27086 428672 nil #[(buffer) "!
> qÃ)" [buffer w3m-modeline-title-timer buffer-live-p nil] 2] (#<buffer *w3m*>) nil 416000] [nil 23143 27092 0 60 display-time-event-handler nil nil 0])
> 
> (gdb) pp prev
> ([nil 23143 27092 0 60 display-time-event-handler nil nil 0])

So here's the thing: timer-list has 5 elements, but concat thinks
there are only 4 elements, so it starts with a 4-element list, and
then there's no place there to put the 5th element, which happens to
be the savehist-autosave timer.

So the question now becomes: how come this code:

  result_len_byte = 0;
  result_len = 0;
  some_multibyte = 0;
  for (argnum = 0; argnum < nargs; argnum++)
    {
      EMACS_INT len;
      this = args[argnum];
      len = XFASTINT (Flength (this));
      ...
    }
  result_len += len;

(nargs = 1 in this case) produces result_len of 4, when timer-list has
actually 5 elements?  Martin, any ideas?