[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#66313: Acknowledgement (29.1.50; process-mark sometimes does not yie
From: |
Eli Zaretskii |
Subject: |
bug#66313: Acknowledgement (29.1.50; process-mark sometimes does not yield the expected value) |
Date: |
Sat, 07 Oct 2023 18:03:27 +0300 |
> From: Markus Triska <triska@metalevel.at>
> Date: Sat, 07 Oct 2023 16:15:38 +0200
>
>
> I have reduced this to the following problem: set-process-buffer
> sometimes unexpectedly changes the position of process-mark.
>
> For a shorter test case that exhibits the issue, please download
> process-mark.el from:
>
> https://www.metalevel.at/ei/process-mark/process-mark.el
>
> Its contents are:
>
> (let ((p (start-process "bash" nil "bash")))
> (set-marker (process-mark p) (point))
> (set-process-buffer p (current-buffer))
> (marker-position (process-mark p)))
>
> (message "hello there!")
>
> Place point after the first form in the file, and evaluate the form with
> C-x C-e.
>
> The expected result is: 165. It is obtained with Emacs 26.1 and several
> later versions.
>
> However, with the Emacs version I used to report this problem, the
> result I get is unexpectedly: 192.
>
> I would greatly appreciate if the previous behaviour could be restored.
I fixed this on the emacs-29 branch, but please note that your code is
quite problematic: the set-marker call associates the process-mark
marker with the current buffer, but the process's buffer is still nil.
So between the 2nd and the 3rd line of your snippet, you have a window
where the process-mark points to a buffer different from the buffer
associated with the process. You should do this the other way around:
first set the process-buffer, and then update the process-mark
position to a position in that buffer.
So in a nutshell, your code was hitting "undefined behavior", and
expecting it to be bug-for-bug compatible with old versions of Emacs
was not really reasonable.