From: Pip Cet <pipcet@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
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: Sat, 14 Mar 2020 15:39:42 +0000 [thread overview]
Message-ID: <CAOqdjBdG=TgCBiNpb+xMarMx4J5JjT3N6Y5-5avjFk=KF-0h2w@mail.gmail.com> (raw)
In-Reply-To: <CAOqdjBfzc-NJn0bXY5hYq=Xb-VboHVNvteyCUpvdM0tUS096eQ@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 305 bytes --]
> > 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.
>
> I agree. I'll prepare a patch.
Here's the patch. Please let me know if anything else needs changing.
[-- Attachment #2: 0001-Don-t-collect-reachable-killed-buffers-during-GC.patch --]
[-- Type: text/x-patch, Size: 1888 bytes --]
From 70f756e08c003ed09fac18af9023c913f910b8e7 Mon Sep 17 00:00:00 2001
From: Pip Cet <pipcet@gmail.com>
Date: Sat, 14 Mar 2020 15:36:41 +0000
Subject: [PATCH] Don't collect reachable killed buffers during GC
* src/alloc.c (valid_buffer_holding): New function, returns true for
valid killed buffers.
(mark_maybe_object, mark_maybe_pointer): Use
`valid_buffer_holding' rather than `live_buffer_holding'.
---
src/alloc.c | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/alloc.c b/src/alloc.c
index 1c6b664b22..eaf31fd19c 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -4511,6 +4511,30 @@ live_buffer_p (struct mem_node *m, void *p)
return !NILP (live_buffer_holding (m, p));
}
+/* If P is a pointer into a buffer, killed or live, return the buffer.
+ Otherwise, return nil. M is a pointer to the mem_block for P. */
+
+static Lisp_Object
+valid_buffer_holding (struct mem_node *m, void *p)
+{
+ /* P must point into the block, and the buffer
+ must not have been killed. */
+ if (m->type == MEM_TYPE_BUFFER)
+ {
+ struct buffer *b = m->start;
+ char *cb = m->start;
+ char *cp = p;
+ ptrdiff_t offset = cp - cb;
+ if (0 <= offset && offset < sizeof *b)
+ {
+ Lisp_Object obj;
+ XSETBUFFER (obj, b);
+ return obj;
+ }
+ }
+ return Qnil;
+}
+
/* Mark OBJ if we can prove it's a Lisp_Object. */
static void
@@ -4566,7 +4590,7 @@ mark_maybe_object (Lisp_Object obj)
case Lisp_Vectorlike:
mark_p = (EQ (obj, live_vector_holding (m, po))
- || EQ (obj, live_buffer_holding (m, po)));
+ || EQ (obj, valid_buffer_holding (m, po)));
break;
default:
@@ -4636,7 +4660,7 @@ mark_maybe_pointer (void *p)
break;
case MEM_TYPE_BUFFER:
- obj = live_buffer_holding (m, p);
+ obj = valid_buffer_holding (m, p);
break;
case MEM_TYPE_CONS:
--
2.25.1
next prev parent reply other threads:[~2020-03-14 15:39 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
2020-03-14 9:02 ` Pip Cet
2020-03-14 15:39 ` Pip Cet [this message]
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='CAOqdjBdG=TgCBiNpb+xMarMx4J5JjT3N6Y5-5avjFk=KF-0h2w@mail.gmail.com' \
--to=pipcet@gmail.com \
--cc=39962@debbugs.gnu.org \
--cc=eggert@cs.ucla.edu \
--cc=eliz@gnu.org \
--cc=pieter-l@vanoostrum.org \
/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).