1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00

Re-enable GC mark trace buffer by default

Enable GC_REMEMBER_LAST_MARKED by default (it was disabled in Emacs 29)
to make it easier to debug difficult-to-reproduce GC problems
encountered by users.  This increases GC costs by about 5 %, which can
be avoided by turning the mark trace buffer back off using the new
--disable-gc-mark-trace option.

See discussion at
https://lists.gnu.org/archive/html/emacs-devel/2024-09/msg00240.html

* configure.ac (--disable-gc-mark-trace): New config option.
* etc/NEWS: Mention it.
* src/alloc.c: Enable it by default and avoid a compiler warning.
This commit is contained in:
Mattias Engdegård 2024-09-17 13:07:01 +02:00
parent c607701589
commit 4c6f45fa8e
3 changed files with 20 additions and 3 deletions

View file

@ -776,6 +776,17 @@ AS_IF([test "$with_android" = no || test -n "$XCONFIGURE"],[
[android_enable_checking=yes [android_enable_checking=yes
export android_enable_checking])]) export android_enable_checking])])
AC_ARG_ENABLE([gc-mark-trace],
[AS_HELP_STRING([--disable-gc-mark-trace],
[disable the mark trace buffer used for debugging the Emacs
garbage collector])],
[ac_enable_gc_mark_trace="${enableval}"],
[ac_enable_gc_mark_trace=yes])
if test "x$ac_enable_gc_mark_trace" = xyes ; then
AC_DEFINE([GC_REMEMBER_LAST_MARKED], [1],
[Define to 1 to enable GC mark trace buffer.])
fi
dnl The name of this option is unfortunate. It predates, and has no dnl The name of this option is unfortunate. It predates, and has no
dnl relation to, the "sampling-based elisp profiler" added in 24.3. dnl relation to, the "sampling-based elisp profiler" added in 24.3.
dnl Actually, it stops it working. dnl Actually, it stops it working.

View file

@ -55,6 +55,13 @@ and to resolve potential incompatibilities between GNU/Linux and *BSD
versions of ALSA. Use '--with-sound=alsa' to build with ALSA on these versions of ALSA. Use '--with-sound=alsa' to build with ALSA on these
operating systems instead. operating systems instead.
---
** New configuration option '--disable-gc-mark-trace'.
This disables the GC mark trace buffer for about 5 % better garbage
collection performance. Doing so may make it more difficult for Emacs
developers to help finding GC-related bugs that you run into, which is
why it the mark trace buffer is enabled by default.
* Startup Changes in Emacs 30.1 * Startup Changes in Emacs 30.1

View file

@ -6849,11 +6849,10 @@ mark_glyph_matrix (struct glyph_matrix *matrix)
} }
} }
/* Whether to remember a few of the last marked values for debugging. */
#define GC_REMEMBER_LAST_MARKED 0
#if GC_REMEMBER_LAST_MARKED #if GC_REMEMBER_LAST_MARKED
/* Remember a few of the last marked values for debugging purposes. */
enum { LAST_MARKED_SIZE = 1 << 9 }; /* Must be a power of 2. */ enum { LAST_MARKED_SIZE = 1 << 9 }; /* Must be a power of 2. */
extern Lisp_Object last_marked[LAST_MARKED_SIZE];
Lisp_Object last_marked[LAST_MARKED_SIZE] EXTERNALLY_VISIBLE; Lisp_Object last_marked[LAST_MARKED_SIZE] EXTERNALLY_VISIBLE;
static int last_marked_index; static int last_marked_index;
#endif #endif