From b586ee1b4cd0744cd4116c24cc71b58857a1cd49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerd=20M=C3=B6llmann?= Date: Thu, 18 Apr 2024 20:12:20 +0200 Subject: [PATCH] finalize_obarray --- src/.lldbinit | 9 ++++++--- src/igc.c | 45 +++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/.lldbinit b/src/.lldbinit index 3f4f59be531..14bbc003d18 100644 --- a/src/.lldbinit +++ b/src/.lldbinit @@ -65,9 +65,12 @@ b die #process handle -p true -s false SIGSEGV #process handle -p true -s false SIGBUS -target create temacs -settings set -- target.run-args --batch -l loadup --temacs=pbootstrap --bin-dest --eln-dest -command alias go process launch --working-dir . +#target create temacs +#settings set -- target.run-args --batch -l loadup --temacs=pbootstrap --bin-dest --eln-dest +#command alias go process launch --working-dir . +target create bootstrap-emacs +settings set -- target.run-args -batch --no-site-file --no-site-lisp -l ./emacs-lisp/loaddefs-gen.elc -f loaddefs-generate--emacs-batch . ./calc ./calendar ./cedet ./cedet/ede ./cedet/semantic ./cedet/semantic/analyze ./cedet/semantic/bovine ./cedet/semantic/decorate ./cedet/semantic/symref ./cedet/semantic/wisent ./cedet/srecode ./emacs-lisp ./emulation ./erc ./eshell ./gnus ./image ./international ./language ./leim ./leim/quail ./mail ./mh-e ./net ./nxml ./org ./play ./progmodes ./textmodes ./url ./use-package ./vc +command alias go process launch --working-dir ../lisp # end. diff --git a/src/igc.c b/src/igc.c index 0026fa31cb3..13ea2194a76 100644 --- a/src/igc.c +++ b/src/igc.c @@ -1445,7 +1445,8 @@ fix_obarray (mps_ss_t ss, struct Lisp_Obarray *o) { MPS_SCAN_BEGIN (ss) { - IGC_FIX12_NOBJS (ss, o->buckets, obarray_size (o)); + if (o->buckets) + IGC_FIX12_NOBJS (ss, o->buckets, obarray_size (o)); } MPS_SCAN_END (ss); return MPS_RES_OK; @@ -1919,6 +1920,17 @@ finalize_hash_table (struct Lisp_Hash_Table *h) } } +static void +finalize_obarray (struct Lisp_Obarray *o) +{ + if (o->buckets) + { + void *b = o->buckets; + o->buckets = NULL; + xfree (b); + } +} + static void finalize_bignum (struct Lisp_Bignum *n) { @@ -2086,6 +2098,10 @@ finalize_vector (mps_addr_t v) finalize_finalizer (v); break; + case PVEC_OBARRAY: + finalize_obarray (v); + break; + case PVEC_SYMBOL_WITH_POS: case PVEC_PROCESS: case PVEC_RECORD: @@ -2093,7 +2109,6 @@ finalize_vector (mps_addr_t v) case PVEC_SQLITE: case PVEC_TS_NODE: case PVEC_NORMAL_VECTOR: - case PVEC_OBARRAY: case PVEC_WINDOW_CONFIGURATION: case PVEC_BUFFER: case PVEC_FRAME: @@ -2139,7 +2154,7 @@ finalize (struct igc *gc, mps_addr_t base) case IGC_OBJ_WEAK: case IGC_OBJ_BLV: case IGC_OBJ_LAST: - igc_assert (!"not implemented"); + igc_assert (!"finalize not implemented"); break; case IGC_OBJ_VECTOR: @@ -2167,10 +2182,32 @@ maybe_finalize (mps_addr_t client, enum pvec_type tag) case PVEC_NATIVE_COMP_UNIT: case PVEC_SUBR: case PVEC_FINALIZER: + case PVEC_OBARRAY: mps_finalize (global_igc->arena, &ref); break; - default: + case PVEC_NORMAL_VECTOR: + case PVEC_FREE: + case PVEC_MARKER: + case PVEC_OVERLAY: + case PVEC_SYMBOL_WITH_POS: + case PVEC_MISC_PTR: + case PVEC_PROCESS: + case PVEC_FRAME: + case PVEC_WINDOW: + case PVEC_BOOL_VECTOR: + case PVEC_BUFFER: + case PVEC_TERMINAL: + case PVEC_XWIDGET: + case PVEC_XWIDGET_VIEW: + case PVEC_OTHER: + case PVEC_WINDOW_CONFIGURATION: + case PVEC_TS_NODE: + case PVEC_SQLITE: + case PVEC_COMPILED: + case PVEC_CHAR_TABLE: + case PVEC_SUB_CHAR_TABLE: + case PVEC_RECORD: break; } }