From: Pip Cet Date: Tue, 20 Aug 2024 19:02:29 +0000 (+0000) Subject: Pure storage removal: Remove support for pinned objects X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=86341127aae36288a2d3b7b1953a90fdef33cff3;p=emacs.git Pure storage removal: Remove support for pinned objects * src/alloc.c (symbol_block_pinned): Remove variable. (init_symbol): Don't initialize 'pinned flag'. (pinned_objects): Remove variable. (mark_pinned_objects, mark_pinned_symbols): Remove functions. (garbage_collect): Don't call 'mark_pinned_objects', 'mark_pinned_symbols'. * src/lisp.h (struct Lisp_Symbol): Remove 'pinned' flag. * src/pdumper.c (dump_symbol): Remove 'pinned' flag from dump. (cherry picked from commit e1e101c6c10b6e5110c2c47946d477a752828a78) --- diff --git a/src/alloc.c b/src/alloc.c index 36a28e0652f..4b5cae4324b 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -3826,13 +3826,6 @@ struct symbol_block static struct symbol_block *symbol_block; static int symbol_block_index = SYMBOL_BLOCK_SIZE; -/* Pointer to the first symbol_block that contains pinned symbols. - Tests for 24.4 showed that at dump-time, Emacs contains about 15K symbols, - 10K of which are pinned (and all but 250 of them are interned in obarray), - whereas a "typical session" has in the order of 30K symbols. - `symbol_block_pinned' lets mark_pinned_symbols scan only 15K symbols rather - than 30K to find the 10K symbols we need to mark. */ -static struct symbol_block *symbol_block_pinned; /* List of free symbols. */ @@ -3858,7 +3851,6 @@ init_symbol (Lisp_Object val, Lisp_Object name) p->u.s.interned = SYMBOL_UNINTERNED; p->u.s.trapped_write = SYMBOL_UNTRAPPED_WRITE; p->u.s.declared_special = false; - p->u.s.pinned = false; } DEFUN ("make-symbol", Fmake_symbol, Smake_symbol, 1, 1, 0, @@ -5594,13 +5586,6 @@ Does not copy symbols. Copies strings without text properties. */) return purecopy (obj); } -/* Pinned objects are marked before every GC cycle. */ -static struct pinned_object -{ - Lisp_Object object; - struct pinned_object *next; -} *pinned_objects; - static Lisp_Object purecopy (Lisp_Object obj) { @@ -5810,13 +5795,6 @@ compact_undo_list (Lisp_Object list) return list; } -static void -mark_pinned_objects (void) -{ - for (struct pinned_object *pobj = pinned_objects; pobj; pobj = pobj->next) - mark_object (pobj->object); -} - #if defined HAVE_ANDROID && !defined (__clang__) /* The Android gcc is broken and needs the following version of @@ -5840,29 +5818,6 @@ android_make_lisp_symbol (struct Lisp_Symbol *sym) #endif -static void -mark_pinned_symbols (void) -{ - struct symbol_block *sblk; - int lim; - struct Lisp_Symbol *sym, *end; - - if (symbol_block_pinned == symbol_block) - lim = symbol_block_index; - else - lim = SYMBOL_BLOCK_SIZE; - - for (sblk = symbol_block_pinned; sblk; sblk = sblk->next) - { - sym = sblk->symbols, end = sym + lim; - for (; sym < end; ++sym) - if (sym->u.s.pinned) - mark_object (make_lisp_symbol (sym)); - - lim = SYMBOL_BLOCK_SIZE; - } -} - static void visit_vectorlike_root (struct gc_root_visitor visitor, struct Lisp_Vector *ptr, @@ -6126,8 +6081,6 @@ garbage_collect (void) struct gc_root_visitor visitor = { .visit = mark_object_root_visitor }; visit_static_gc_roots (visitor); - mark_pinned_objects (); - mark_pinned_symbols (); mark_lread (); mark_terminals (); mark_kboards (); diff --git a/src/lisp.h b/src/lisp.h index 8c40130cc43..8e096675ba7 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -796,9 +796,6 @@ struct Lisp_Symbol special (with `defvar' etc), and shouldn't be lexically bound. */ bool_bf declared_special : 1; - /* True if pointed to from purespace and hence can't be GC'd. */ - bool_bf pinned : 1; - /* The symbol's name, as a Lisp string. */ Lisp_Object name; diff --git a/src/pdumper.c b/src/pdumper.c index 015c899a704..fd61a40d8ae 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -2494,7 +2494,6 @@ dump_symbol (struct dump_context *ctx, DUMP_FIELD_COPY (&out, symbol, u.s.trapped_write); DUMP_FIELD_COPY (&out, symbol, u.s.interned); DUMP_FIELD_COPY (&out, symbol, u.s.declared_special); - DUMP_FIELD_COPY (&out, symbol, u.s.pinned); dump_field_lv (ctx, &out, symbol, &symbol->u.s.name, WEIGHT_STRONG); switch (symbol->u.s.redirect) {