all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Alan Mackenzie <acm@muc.de>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
Subject: Re: Edebug corrupting point in buffers.
Date: Wed, 2 Nov 2022 10:40:59 +0000	[thread overview]
Message-ID: <Y2JJOx2idfuDAP5v@ACM> (raw)
In-Reply-To: <jwvk04e1hsn.fsf-monnier+emacs@gnu.org>

Hello, Stefan.

On Tue, Nov 01, 2022 at 17:51:45 -0400, Stefan Monnier wrote:
> >> > Why does set-window-configuration overwrite the buffer-points?
> >> > The window configuration does not contain them.  The code just
> >> > assumes that the buffer-point should be set to the window point.
> >> > Of course, we have a race condition if a buffer is displayed in
> >> > several windows.  So this would appear to be a bug, the root cause
> >> > of the bug in this thread.

> >> This suggests the patch below, right?
> >> I note that this only changes the buffer-point for `current-buffer`,
> >> not for all the buffers displayed in the window-config, right?

> > Not quite.  It changes the buffer-point for every buffer except the
> > "current buffer".

> Really?  My reading of the code:

> 	      /* As documented in Fcurrent_window_configuration, don't
> 		 restore the location of point in the buffer which was
> 		 current when the window configuration was recorded.  */
> 	      if (!EQ (p->buffer, new_current_buffer)
> 		  && XBUFFER (p->buffer) == current_buffer)
> 		Fgoto_char (w->pointm);

> is that it's done only for the current buffer and only if it's different
> from the "to be current buffer".

> Am I missing something?

Hmm.  I spent a great deal of yesterday asserting false things, then
apologising for them.  The above was the last such false thing, for which
I also apologise.

I think I was influenced by the doc string of
current-window-configuration, which seems to imply what I wrote above.

> >> Yup.  We could start by providing some way to tell
> >> `set-window-configuration` not to change buffer-points (and use that in
> >> Edebug)?  This way we fix the problem for Edebug without risking
> >> changes elsewhere?
> > An &optional parameter, you mean?  I'd thought of that, but it feels
> > ugly.

> Agreed.  Especially since I get the feeling that it's just a plain bug.

> That piece of code dates back to the initial revision of window.c back
> in 1991, tho.  That function had some serious bugs in the handling of
> buffer points which stayed unnoticed for years (I remember the one
> I fixed with in 2005 with e67a1dea3e622d61024b2dc17c36831d048bb271), so
> I wouldn't be surprised that this one is also a mistake.

> > I've tried it, and the patch doesn't fix the bug.  :-(

> Why didn't you say so at the beginning of your message?
> Now I look like fool!  :-)

The fundamental problem is a conceptual one:- so many bits of code
wrongly take the liberty of writing to buffer point when they have no
business doing so.  The only code which should transfer window point to
buffer point is the command loop (or maybe redisplay) when the window is
about to become the one that the user will edit in.  Or something like
that.  There's clearly been a lot of confusion about window/buffer point
over the decades which shows in the number of places such changes in
buffer point occur, and the bugs which have sometimes resulted, like the
one you cite above.

However, even I can see that it is impracticable to try to fix this now.

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



  reply	other threads:[~2022-11-02 10:40 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-31 11:43 Edebug corrupting point in buffers; we need buffer-point and set-buffer-point, perhaps Alan Mackenzie
2022-10-31 13:16 ` Eli Zaretskii
2022-10-31 14:32   ` Alan Mackenzie
2022-10-31 14:50     ` Eli Zaretskii
2022-10-31 15:46       ` Alan Mackenzie
2022-10-31 17:33         ` Stefan Monnier
2022-10-31 17:55         ` Eli Zaretskii
2022-10-31 20:46           ` Alan Mackenzie
2022-11-01  6:21             ` Eli Zaretskii
2022-10-31 17:19       ` Stefan Monnier
2022-10-31 18:09         ` Eli Zaretskii
2022-10-31 20:35           ` Stefan Monnier
2022-10-31 17:21 ` Stefan Monnier
2022-10-31 18:10   ` Eli Zaretskii
2022-10-31 23:14     ` Stefan Monnier
2022-11-01  7:06       ` Eli Zaretskii
2022-10-31 21:25 ` Alan Mackenzie
2022-11-01  6:45   ` Eli Zaretskii
2022-11-01 11:41     ` Edebug corrupting point in buffers Alan Mackenzie
2022-11-01 11:53       ` Eli Zaretskii
2022-11-01 13:42         ` Alan Mackenzie
2022-11-01 14:42           ` Eli Zaretskii
2022-11-01 17:06             ` Alan Mackenzie
2022-11-01 17:12               ` Eli Zaretskii
2022-11-01 17:24                 ` Alan Mackenzie
2022-11-01 17:57                   ` Eli Zaretskii
2022-11-01 19:02                     ` Alan Mackenzie
2022-11-01 19:47                       ` Stefan Monnier
2022-11-01 20:53                         ` Alan Mackenzie
2022-11-01 21:51                           ` Stefan Monnier
2022-11-02 10:40                             ` Alan Mackenzie [this message]
2022-11-02 13:12                               ` Stefan Monnier
2022-11-02 13:28                                 ` Eli Zaretskii
2022-11-02  3:28                         ` Eli Zaretskii
2022-11-02 12:53                           ` Stefan Monnier
2022-11-02 17:40                       ` Juri Linkov
2022-11-02 18:26                         ` Eli Zaretskii
2022-11-02 18:36                           ` Juri Linkov
2022-11-02 18:52                             ` Eli Zaretskii
2022-11-03 17:25                               ` Juri Linkov
2022-11-03 18:06                                 ` Eli Zaretskii
2022-11-03 18:31                                   ` Juri Linkov
2022-11-02 11:34                     ` Alan Mackenzie
2022-11-02 14:00                       ` Eli Zaretskii
2022-11-02 16:18                         ` Alan Mackenzie
2022-11-02 16:57                           ` Eli Zaretskii
2022-11-03 11:32                             ` Alan Mackenzie
2022-11-03 13:29                               ` Eli Zaretskii
2022-11-03 18:07                                 ` Alan Mackenzie
2022-11-03 18:15                                   ` Eli Zaretskii
2022-11-03 20:25                                     ` Alan Mackenzie
2022-11-05 11:24                                       ` Eli Zaretskii
2022-11-05 16:50                                         ` Alan Mackenzie
2022-11-06  8:10                                           ` Eli Zaretskii
2022-11-06 14:40                                             ` Alan Mackenzie
2022-11-03 19:29                         ` Stefan Monnier
2022-11-03 19:36                           ` Eli Zaretskii
2022-11-03 20:39                             ` Stefan Monnier
2022-11-04  6:34                               ` Eli Zaretskii
2022-11-04  6:37                               ` Eli Zaretskii
2022-11-03 19:57                           ` Alan Mackenzie
2022-11-03 20:35                             ` Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y2JJOx2idfuDAP5v@ACM \
    --to=acm@muc.de \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.