Subject: bug#79200: 31.0.50; Duplicated elements for '#<marker at' in buffer-undo-list

From: Óscar Fuentes <[email-masked]>
Date: Sat, 09 Aug 2025 11:01:37 +0200

Gerd Möllmann <[email-masked]> writes:

> Óscar Fuentes <[email-masked]> writes:
>
>> emacs -Q
>>
>> write in *scratch* some lines with random words:
>>
>> arins
>> arseina
>> aierni
>>
>> iosrn nioni
>> ionugfw
>>
>> sronuf
>>
>> Now undo a few of those lines (C-_), move the cursor and C-_ again to
>> redo.
>
> Interesting. I come from a slightly different angle, that in my mac+igc
> port I had sometimes only 3 undos before I got "no more undo
> information". and I thought I had messed up something.

Same here, but igc/Linux. Please note that the recipe on my report is
with yesterday's master, though.

> My cimpler recipe is
>
> 1. Make a new buffer x.el
> 2. Type an a
> 3. undo
> 4. C-h v buffer-undo-list
>
> => 
>
> Value:
> (nil ("a" . 1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1)
>      (#<marker at 1 in x.el> . -1) nil (1 . 2) (t . 0))
> Local in buffer x.el; global value is nil

I can't reproduce this with my master's build:

emacs -Q x.el

type an a

undo

C-h v buffer-undo-list

Its value is
(nil (#("a" 0 1 (fontified t)) . 1) (#<marker at 1 in x.el> . -1) nil
     (1 . 2) (t . -1))
Local in buffer x.el; global value is nil

However, doing the same with my igc build of 1 of August yields this:

Its value is
(nil (#("a" 0 1 (fontified t)) . 1) (#<marker at 1 in x.el> . -1)
     (#<marker at 1 in x.el> . -1) (#<marker at 1 in x.el> . -1) nil
     (1 . 2) (t . -1))
Local in buffer x.el; global value is nil

> So far I can't see what is the cause. I would have guessed something in
> or around primitive-undo, but that hasn't changed forever.

Eli in emacs-devel pointed to the possibility that something is creating
lots of markers. Checking if those repeated elements in buffer-undo-list
point to the same marker or to different ones would be revealing. Or
not: I don't even know if getting markers to the same place in a buffer
yield the same object or new ones.