From: Gregory Heytings <gregory@heytings.org>
To: Simon Pugnet <simon@polaris64.net>
Cc: 61507@debbugs.gnu.org
Subject: bug#61507: 29.0.60; "free(): invalid pointer" on latest emacs-29 commit when loading init.el
Date: Tue, 14 Feb 2023 14:19:46 +0000 [thread overview]
Message-ID: <0f053182b0dace6b42ae@heytings.org> (raw)
In-Reply-To: <87cz6cwdlc.fsf@polaris64.net>
[-- Attachment #1: Type: text/plain, Size: 112 bytes --]
Can you please try the attached patch (on top of the emacs-29 HEAD) and
tell us if it fixes the bug? Thanks.
[-- Attachment #2: Improve-backward-compatibility-of-save-restriction.patch --]
[-- Type: text/x-diff, Size: 4934 bytes --]
From 85f4a2851514fad981b74abe14b833196d5987b0 Mon Sep 17 00:00:00 2001
From: Gregory Heytings <gregory@heytings.org>
Date: Tue, 14 Feb 2023 09:22:22 +0000
Subject: [PATCH] Improve backward compatibility of save-restriction
* src/editfns.c (save_restriction_and_narrowing_locks_restore):
New function, combining 'save_restriction_restore' and
'narrowing_locks_restore'.
(narrowing_locks_restore): Make static.
(Fsave_restriction): Use the new function instead of the two ones
it combines.
* src/lisp.h: Make the new function externally visible.
* src/bytecode.c (exec_byte_code): Use the new function instead of
the two ones it combines.
* src/comp.c (helper_save_restriction): Use the new function
instead of the two ones it combines.
* lisp/emacs-lisp/bytecomp.el (byte-compile-save-restriction):
Decrement unbinding count.
---
lisp/emacs-lisp/bytecomp.el | 2 +-
src/bytecode.c | 7 +++----
src/comp.c | 7 +++----
src/editfns.c | 14 +++++++++++---
src/lisp.h | 2 +-
5 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index c6cda6b588a..5df1205869c 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -4900,7 +4900,7 @@ byte-compile-save-excursion
(defun byte-compile-save-restriction (form)
(byte-compile-out 'byte-save-restriction 0)
(byte-compile-body-do-effect (cdr form))
- (byte-compile-out 'byte-unbind 2))
+ (byte-compile-out 'byte-unbind 1))
(defun byte-compile-save-current-buffer (form)
(byte-compile-out 'byte-save-current-buffer 0)
diff --git a/src/bytecode.c b/src/bytecode.c
index 8e214560f30..ca7ae4766e1 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -940,10 +940,9 @@ #define DEFINE(name, value) [name] = &&insn_ ## name,
}
CASE (Bsave_restriction):
- record_unwind_protect (save_restriction_restore,
- save_restriction_save ());
- record_unwind_protect (narrowing_locks_restore,
- narrowing_locks_save ());
+ record_unwind_protect (save_restriction_and_narrowing_locks_restore,
+ Fcons (save_restriction_save (),
+ narrowing_locks_save ()));
NEXT;
CASE (Bcatch): /* Obsolete since 25. */
diff --git a/src/comp.c b/src/comp.c
index 0e2dfd3913b..fe2c9b054b6 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -5061,10 +5061,9 @@ helper_unbind_n (Lisp_Object n)
static void
helper_save_restriction (void)
{
- record_unwind_protect (save_restriction_restore,
- save_restriction_save ());
- record_unwind_protect (narrowing_locks_restore,
- narrowing_locks_save ());
+ record_unwind_protect (save_restriction_and_narrowing_locks_restore,
+ Fcons (save_restriction_save (),
+ narrowing_locks_save ()));
}
static bool
diff --git a/src/editfns.c b/src/editfns.c
index ce133785e0b..dbcc5728dda 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -2804,7 +2804,7 @@ narrowing_locks_save (void)
return Fcons (buf, Fcopy_sequence (locks));
}
-void
+static void
narrowing_locks_restore (Lisp_Object buf_and_saved_locks)
{
Lisp_Object buf = XCAR (buf_and_saved_locks);
@@ -3068,6 +3068,13 @@ save_restriction_restore (Lisp_Object data)
set_buffer_internal (cur);
}
+void
+save_restriction_and_narrowing_locks_restore (Lisp_Object data)
+{
+ save_restriction_restore (XCAR (data));
+ narrowing_locks_restore (XCDR (data));
+}
+
DEFUN ("save-restriction", Fsave_restriction, Ssave_restriction, 0, UNEVALLED, 0,
doc: /* Execute BODY, saving and restoring current buffer's restrictions.
The buffer's restrictions make parts of the beginning and end invisible.
@@ -3091,8 +3098,9 @@ DEFUN ("save-restriction", Fsave_restriction, Ssave_restriction, 0, UNEVALLED, 0
register Lisp_Object val;
specpdl_ref count = SPECPDL_INDEX ();
- record_unwind_protect (save_restriction_restore, save_restriction_save ());
- record_unwind_protect (narrowing_locks_restore, narrowing_locks_save ());
+ record_unwind_protect (save_restriction_and_narrowing_locks_restore,
+ Fcons (save_restriction_save (),
+ narrowing_locks_save ()));
val = Fprogn (body);
return unbind_to (count, val);
}
diff --git a/src/lisp.h b/src/lisp.h
index 93197d38176..a86a2e823f9 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -4685,7 +4685,7 @@ XMODULE_FUNCTION (Lisp_Object o)
extern Lisp_Object save_restriction_save (void);
extern void save_restriction_restore (Lisp_Object);
extern Lisp_Object narrowing_locks_save (void);
-extern void narrowing_locks_restore (Lisp_Object);
+extern void save_restriction_and_narrowing_locks_restore (Lisp_Object);
extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, bool);
extern Lisp_Object make_buffer_string_both (ptrdiff_t, ptrdiff_t, ptrdiff_t,
ptrdiff_t, bool);
--
2.39.0
next prev parent reply other threads:[~2023-02-14 14:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-14 14:01 bug#61507: 29.0.60; "free(): invalid pointer" on latest emacs-29 commit when loading init.el Simon Pugnet
2023-02-14 14:19 ` Gregory Heytings [this message]
2023-02-14 14:35 ` Simon Pugnet
2023-02-14 14:38 ` Gregory Heytings
2023-09-06 0:04 ` Stefan Kangas
2023-02-14 14:29 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-02-14 15:04 ` Simon Pugnet
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=0f053182b0dace6b42ae@heytings.org \
--to=gregory@heytings.org \
--cc=61507@debbugs.gnu.org \
--cc=simon@polaris64.net \
/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.