Subject: bug#5852: 23.1; Incorrect references in ses-mode

From: Vincent Belaïche <[email-masked]>
Date: Sun, 25 Jul 2021 07:48:55 +0200

Just to add something : reading again SES code, and (info "(elisp)
Command Overview") I am a bit skeptical about the explanation in my
previous email.
It seems that only key strokes are queue, but command execution and
post command hook are in sequence, so not done concurrently.
I wrote this function to try to reproduce the bug, and on my office PC
it does not reproduce it:

(defun bug-5852 ();;---
  "Check no irrelevant reference is created when a row is inserted and
a formula is yanked"
  (interactive);;---
  (let ((ses-initial-size '(3 . 3)))
  (with-temp-buffer
    (ses-mode)
    (dolist (val '(
                   (ses-edit-cell 0 1 1)
                   (ses-edit-cell 1 0 2)
                   (ses-edit-cell 1 1 (+ B1 A2))
                   (ses-edit-cell 2 0 3)
                   (ses-edit-cell 2 1 (+ B2 A3))
                   (ses-jump A3)
                   (ses-insert-row 1)
                   (ses-edit-cell 2 0 4)
                   (ses-jump B2)
                   ))
      (apply 'funcall-interactively  val)
      (ses-command-hook))
    (let ((beg (point-marker)))
      (ses-jump 'C2) ; C-n
      (copy-region-as-kill beg (point) nil)
      (set-marker beg nil))
    (dolist (val '(
                   (ses-jump B3)
                   (yank)
                   (ses-jump B4)
                   (yank)
                   ))
      (apply 'funcall-interactively  val)
      (ses-command-hook))
    (ses-repair-cell-reference-all)
    )))

Please note that the main difference with the provided example is that
motion is done with ses-jump, and not with motion commands. Also the
save to keyring is not done interatively.
   V.

Le sam. 24 juil. 2021 à 23:46, Vincent Belaïche
<[email-masked]> a écrit :
>
> Hello Lars,
>
> Sorry for not making any feedback for so long, actually I was just
> distracted by some other business, and I somewhat had forgotten about
> it.
>
> I suspect a race condition between the post command hook and the next
> command. That is to say when one yanks the fomula (the first yank),
> one relocates the reference but for this one uses current references
> that have not yet been relocated because the previous post-command
> hook execution is not yet over.
>
> The bug does not show every time I do the experiment. I tried this
> morning with my office PC which is a fast machine, and it proved out
> quite hard to reproduce, even when I launched some big C program
> compilation in parallel to eat the mips.
>
> Next week I will do some experiment with my home PC which is quite
> quite slower, and I make some feedback. Unfortunateless both machine
> do not have the same emacs version, but anyway all changes in SES
> since the version on my home PC are not related to this bug, so
> nevertheless that will be a good indication whether my guess is
> correct.
>
>   V.
>
> Le dim. 18 juil. 2021 à 15:37, Lars Ingebrigtsen <[email-masked]> a écrit :
> >
> > Vincent Belaïche <[email-masked]> writes:
> >
> > > I will investigate why and feed back once I have a better idea of what
> > > is happening.
> >
> > Hi,
> >
> > this was a year ago.  Did you make any progress on this issue?
> >
> > --
> > (domestic pets only, the antidote for overdose, milk.)
> >    bloggy blog: http://lars.ingebrigtsen.no