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

From: Gerd Möllmann <[email-masked]>
Date: Sat, 09 Aug 2025 14:31:15 +0200

Óscar Fuentes <[email-masked]> writes:

> Gerd Möllmann <[email-masked]> writes:
>
>> Gerd Möllmann <[email-masked]> writes:
>>
>>> Makes sense: no idea what that is, but it's something with mode-lines,
>>> and what Pip found out is also the mode-line department. 
>>
>> And with Pip's patch applied, I can now longer reproduce the problem.
>
> Applied the patch to igc (adding the call to detach_marker.) It took a
> while of monkeying around, but eventually...
>
>
> (nil (363 . 364) nil (354 . 363) nil (353 . 354) nil (352 . 353) nil
>      (351 . 352) nil (#("
> "
> 			0 1 (fontified t))
> 		      . 351)
>      (#<marker (moves after insertion) at 351 in *scratch*> . 1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 363 in *scratch*> . -1)
>      (#<marker at 363 in *scratch*> . -1)
>      (#<marker in no buffer> . -1) nil
>      (#("n" 0 1 (fontified t)) . 352)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 363 in *scratch*> . -1)
> etc.
>
>
> Bummer.
>
> Looks like the patch puts igc on the same footing as master wrt the
> required work to reproduce the problem.

That's something, thanks to Pip!

Can you determine if these are different markers (sxhash-eq)?

> As a side note, executing igc-collect removed some elements:
>
> (nil (363 . 364) nil (354 . 363) nil (353 . 354) nil (352 . 353) nil
>      (351 . 352) nil (#("
> "
> 			0 1 (fontified t))
> 		      . 351)
>      (#<marker (moves after insertion) at 351 in *scratch*> . 1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker at 364 in *scratch*> . -1)
>      (#<marker in no buffer> . -1) (#<marker in no buffer> . -1)
>      (#<marker in no buffer> . -1) nil
>      (#("n" 0 1 (fontified t)) . 352)
> etc.
>
> Note that on my first copy&paste of buffer-undo-list the first sequence
> of repeated elements was 8, but above it shows 6. The other repeated
> sequences show a similar change.

I would guess igc_collect also does a "weak collection". But it's only a
guess.