From: Eli Zaretskii <eliz@gnu.org>
To: Pip Cet <pipcet@gmail.com>
Cc: 39962@debbugs.gnu.org, pieter-l@vanoostrum.org, eggert@cs.ucla.edu
Subject: bug#39962: 27.0.90; Crash in Emacs 27.0.90
Date: Fri, 13 Mar 2020 18:30:40 +0200 [thread overview]
Message-ID: <831rpw8bf3.fsf@gnu.org> (raw)
In-Reply-To: <CAOqdjBdB6dNiK==8oZaW=AHYhzov15Krk+xU4zH--KM6LONzYg@mail.gmail.com> (message from Pip Cet on Fri, 13 Mar 2020 13:56:07 +0000)
> From: Pip Cet <pipcet@gmail.com>
> Date: Fri, 13 Mar 2020 13:56:07 +0000
> Cc: pieter-l@vanoostrum.org, 39962@debbugs.gnu.org, eggert@cs.ucla.edu
>
> On Fri, Mar 13, 2020 at 9:40 AM Eli Zaretskii <eliz@gnu.org> wrote:
> > > > > It doesn't affect visible behavior of any callers, except in the case
> > > > > where the previous behavior was buggy.
> > > >
> > > > I guess we have different notions of "visible"
> > >
> > > Please say something about your notion of "visible". It doesn't affect
> > > any of the existing C callers of valid_lisp_object_p. Are you talking
> > > about printing valid_lisp_object_p(x) in a debugger, and not getting
> > > the expected value? Or something else?
> >
> > I'm talking about the behavior documented in the commentary.
>
> You're right if your point is the comment should be adjusted to omit
> the unnecessary, and unused, special behavior on killed buffers.
I don't yet think that function's behavior should be changed. See
below.
> > > > and "buggy".
> > >
> > > It avoids segfaults or random memory corruption. How is that not "buggy"?
> >
> > That's not the issue here. You said the proposed change didn't change
> > the behavior "except where it was buggy"; I'm saying that it changes
> > the behavior unrelated to this bug, where previous behavior was not
> > buggy by any measure.
>
> How so? Can you describe a scenario in which Emacs would behave at all
> differently?
The behavior of live_buffer_p and valid_lisp_object_p changed, and
those functions weren't "buggy" before.
> valid_lisp_object_p returns a different value, sure; but
> none of its callers care about the difference, so Emacs behavior
> overall does not change.
I wasn't talking about behavior of Emacs as a whole.
And I don't understand why you are arguing about this. You asked me
to say something about my notion of "visible", and I did. Will
arguing about _my_ notion of that get us to some useful place?
> > > (gdb) p current_thread->m_current_buffer
> > > $3 = (struct buffer *) 0x555556694b10
> > > (gdb) p valid_lisp_object_p(0x555556694b15)
> > > $4 = 1
> > > (gdb) p valid_lisp_object_p(0x555556694b25)
> > > $5 = 1
> >
> > Why do you consider this incorrect? The Emacs GC is "conservative",
> > which means it doesn't collect anything that _might_ be a valid Lisp
> > object. In what ways does the above violate that contract?
>
> GC is conservative; valid_lisp_object_p is documented to be precise: a
> return value of 1 or 2 means that the object is valid, not that it's
> potentially valid and potentially nonsense.
But what does "valid" mean in this case? The part that looks at the
stack uses the stack-marking routines, and thus inherits the
"conservative" nature of stack marking. The code also makes it quite
clear that it only considers "live" objects as valid, and a killed
buffer is not "live". So I still don't understand in what way the
above results are incorrect.
> > Your patch modifies the notion of whether a buffer is "live",
>
> No, it modifies a specific function (mis)named buffer_live_p.
Which, among other things, checks whether a buffer is "live". So it
is not necessarily mis-named.
> The dozens of places in which we check whether a buffer is "live",
> as opposed to "killed", are unaffected. Only GC is affected.
No, not only GC is affected. Some of the callers are outside GC,
we've been there up-thread, and agreed about that.
> A buffer should be marked iff it is reachable
>
> A buffer is marked iff it is reachable from the heap or it is
> reachable from the stack and buffer_live_p returns true
>
> Therefore, it is invalid for buffer_live_p to return false for a
> buffer which is reachable from the stack.
This mixes two notions: a "live" buffer and a buffer that should be
marked. They are not the same.
> > if so, how come stack marking didn't find it?
>
> Because we are talking about the stack marking! The stack marking
> calls buffer_live_p to check whether it should actually mark the
> buffer or not.
Fine, so you are saying that stack marking should disregard whether a
buffer is "live"? Then let's make such a change only for stack
marking, not in a function called from other places.
next prev parent reply other threads:[~2020-03-13 16:30 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-06 23:55 bug#39962: 27.0.90; Crash in Emacs 27.0.90 Pieter van Oostrum
2020-03-07 7:48 ` Eli Zaretskii
2020-03-07 8:40 ` Pieter van Oostrum
2020-03-07 8:41 ` Pieter van Oostrum
2020-03-07 10:51 ` Eli Zaretskii
2020-03-07 11:06 ` Pieter van Oostrum
2020-03-07 13:10 ` Eli Zaretskii
2020-03-07 15:06 ` Pieter van Oostrum
2020-03-07 15:17 ` Eli Zaretskii
2020-03-07 15:49 ` Pieter van Oostrum
2020-03-07 16:07 ` Eli Zaretskii
2020-03-07 17:21 ` Pieter van Oostrum
2020-03-07 18:01 ` Eli Zaretskii
2020-03-07 19:14 ` Pieter van Oostrum
2020-03-07 19:21 ` Eli Zaretskii
2020-03-07 22:07 ` Pieter van Oostrum
2020-03-09 4:00 ` Pip Cet
2020-03-08 7:42 ` Paul Eggert
2020-03-08 9:34 ` Pieter van Oostrum
2020-03-08 10:05 ` Paul Eggert
2020-03-08 21:37 ` Pieter van Oostrum
2020-03-08 21:58 ` Pieter van Oostrum
2020-03-08 22:34 ` Paul Eggert
2020-03-08 23:58 ` Pieter van Oostrum
2020-03-09 0:01 ` Paul Eggert
2020-03-09 13:26 ` Pieter van Oostrum
2020-03-09 17:10 ` Eli Zaretskii
2020-03-09 19:48 ` Pieter van Oostrum
2020-03-10 13:37 ` Pieter van Oostrum
2020-03-09 19:51 ` Paul Eggert
2020-03-09 21:32 ` Pieter van Oostrum
2020-03-10 10:52 ` Pieter van Oostrum
2020-03-10 14:19 ` Pip Cet
2020-03-10 16:36 ` Pieter van Oostrum
2020-03-11 14:32 ` Pip Cet
2020-03-11 15:16 ` Pieter van Oostrum
2020-03-11 15:43 ` Pip Cet
2020-03-11 15:51 ` Paul Eggert
2020-03-11 16:21 ` Eli Zaretskii
2020-03-11 17:52 ` Eli Zaretskii
2020-03-11 18:53 ` Pip Cet
2020-03-11 19:34 ` Eli Zaretskii
2020-03-12 10:32 ` Pip Cet
2020-03-12 15:23 ` Eli Zaretskii
2020-03-12 20:36 ` Pip Cet
2020-03-13 9:39 ` Eli Zaretskii
2020-03-13 13:56 ` Pip Cet
2020-03-13 16:30 ` Eli Zaretskii [this message]
2020-03-14 9:02 ` Pip Cet
2020-03-14 15:39 ` Pip Cet
2020-03-14 16:00 ` Paul Eggert
2020-03-14 16:15 ` Pip Cet
2020-03-14 16:57 ` Eli Zaretskii
2020-03-14 18:34 ` Pip Cet
2020-03-14 19:09 ` Paul Eggert
2020-03-14 20:10 ` Eli Zaretskii
2020-03-15 12:12 ` Pip Cet
2020-03-15 14:53 ` Eli Zaretskii
2020-03-15 12:09 ` Pip Cet
2020-03-15 14:50 ` Eli Zaretskii
2020-03-16 16:31 ` Stefan Monnier
2020-03-11 20:03 ` Pieter van Oostrum
2020-03-12 13:55 ` Pip Cet
2020-03-12 18:13 ` Pieter van Oostrum
2020-03-12 20:00 ` Pip Cet
2020-03-13 8:09 ` Eli Zaretskii
2020-03-13 8:39 ` Pip Cet
2020-03-13 9:19 ` Eli Zaretskii
2020-03-13 17:43 ` Pieter van Oostrum
2020-03-14 3:38 ` Richard Stallman
2020-03-14 8:37 ` Eli Zaretskii
2020-03-14 9:16 ` Pip Cet
2020-03-14 15:34 ` Pip Cet
2020-03-13 17:42 ` Pieter van Oostrum
2020-03-13 19:34 ` Eli Zaretskii
2020-03-13 21:35 ` Pieter van Oostrum
2020-03-14 8:08 ` Eli Zaretskii
2020-03-14 21:32 ` Pieter van Oostrum
2020-03-15 19:49 ` Pieter van Oostrum
2020-03-15 19:57 ` Eli Zaretskii
2020-03-15 23:26 ` Pieter van Oostrum
2020-03-16 10:44 ` Pieter van Oostrum
2020-03-16 15:07 ` Eli Zaretskii
2020-03-16 15:33 ` Pip Cet
2020-03-16 17:19 ` Pip Cet
2020-03-17 3:29 ` Pieter van Oostrum
2020-03-17 4:54 ` Pip Cet
2020-03-17 5:20 ` Pip Cet
2020-03-17 8:45 ` Pieter van Oostrum
2020-03-17 13:54 ` Pip Cet
2020-03-17 15:27 ` Pieter van Oostrum
2020-03-17 20:16 ` Pip Cet
2020-03-17 23:32 ` Pieter van Oostrum
2020-03-18 15:05 ` Eli Zaretskii
2020-03-19 13:23 ` Pieter van Oostrum
2020-03-19 13:57 ` Pip Cet
2020-03-21 21:22 ` Pieter van Oostrum
2020-03-22 14:21 ` Eli Zaretskii
2020-03-22 15:48 ` Pip Cet
2020-03-23 19:34 ` Pip Cet
2020-03-17 8:40 ` Pieter van Oostrum
2020-03-17 15:33 ` Eli Zaretskii
2020-03-17 20:59 ` Paul Eggert
2020-03-18 6:17 ` Pip Cet
2020-03-18 9:22 ` Robert Pluim
2020-03-18 11:38 ` Pieter van Oostrum
2020-03-18 11:57 ` Paul Eggert
2020-03-18 14:08 ` Pip Cet
2020-03-19 19:17 ` Pieter van Oostrum
2020-03-19 19:31 ` Pip Cet
2020-03-19 21:30 ` Pieter van Oostrum
2020-03-18 14:08 ` Eli Zaretskii
2020-03-16 18:36 ` Pieter van Oostrum
2020-03-13 7:58 ` Eli Zaretskii
2020-03-10 15:10 ` Eli Zaretskii
2020-03-10 18:23 ` Pieter van Oostrum
2020-03-11 8:22 ` Paul Eggert
2022-04-30 12:38 ` Lars Ingebrigtsen
2022-05-29 13:19 ` Lars Ingebrigtsen
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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=831rpw8bf3.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=39962@debbugs.gnu.org \
--cc=eggert@cs.ucla.edu \
--cc=pieter-l@vanoostrum.org \
--cc=pipcet@gmail.com \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).