>From b80559be212292d44ce14ca5e94505cab4d9a868 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 13 Aug 2019 12:20:40 -0700 Subject: [PATCH 2/3] Let consing_until_gc exceed EMACS_INT_MAX This builds on the previous patch. * src/alloc.c (consing_until_gc): Now of type intmax_t, since gc-cons-threshold can be up to INTMAX_MAX. All uses changed. * src/lisp.h (CONSING_CT_MAX, consing_ct): Remove. --- src/alloc.c | 16 ++++++++-------- src/lisp.h | 8 +------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/alloc.c b/src/alloc.c index 7bed3f4488..14b0a7b838 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -224,7 +224,7 @@ struct emacs_globals globals; /* maybe_gc collects garbage if this goes negative. */ -consing_ct consing_until_gc; +intmax_t consing_until_gc; #ifdef HAVE_PDUMPER /* Number of finalizers run: used to loop over GC until we stop @@ -2547,7 +2547,7 @@ free_cons (struct Lisp_Cons *ptr) might incorrectly return non-zero. */ int incr = sizeof *ptr; if (INT_ADD_WRAPV (consing_until_gc, incr, &consing_until_gc)) - consing_until_gc = CONSING_CT_MAX; + consing_until_gc = INTMAX_MAX; gcstat.total_free_conses++; } @@ -5502,7 +5502,7 @@ staticpro (Lisp_Object const *varaddress) static void allow_garbage_collection (intmax_t consing) { - consing_until_gc = consing - (CONSING_CT_MAX - consing_until_gc); + consing_until_gc = consing - (INTMAX_MAX - consing_until_gc); garbage_collection_inhibited--; } @@ -5512,7 +5512,7 @@ inhibit_garbage_collection (void) ptrdiff_t count = SPECPDL_INDEX (); record_unwind_protect_intmax (allow_garbage_collection, consing_until_gc); garbage_collection_inhibited++; - consing_until_gc = CONSING_CT_MAX; + consing_until_gc = INTMAX_MAX; return count; } @@ -5818,7 +5818,7 @@ garbage_collect_1 (struct gcstat *gcst) /* In case user calls debug_print during GC, don't let that cause a recursive GC. */ - consing_until_gc = CONSING_CT_MAX; + consing_until_gc = INTMAX_MAX; /* Save what's currently displayed in the echo area. Don't do that if we are GC'ing because we've run out of memory, since @@ -5933,17 +5933,17 @@ garbage_collect_1 (struct gcstat *gcst) consing_until_gc = memory_full_cons_threshold; else { - consing_ct threshold = max (gc_cons_threshold, GC_DEFAULT_THRESHOLD / 10); + intmax_t threshold = max (gc_cons_threshold, GC_DEFAULT_THRESHOLD / 10); if (FLOATP (Vgc_cons_percentage)) { double tot = (XFLOAT_DATA (Vgc_cons_percentage) * total_bytes_of_live_objects ()); if (threshold < tot) { - if (tot < CONSING_CT_MAX) + if (tot < INTMAX_MAX) threshold = tot; else - threshold = CONSING_CT_MAX; + threshold = INTMAX_MAX; } } consing_until_gc = threshold; diff --git a/src/lisp.h b/src/lisp.h index 043f2f738e..0370c52fad 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3793,13 +3793,7 @@ extern void flush_stack_call_func (void (*func) (void *arg), void *arg); extern void garbage_collect (void); extern const char *pending_malloc_warning; extern Lisp_Object zero_vector; -#define CONSING_CT_MAX max (INTPTR_MAX, EMACS_INT_MAX) -#if CONSING_CT_MAX == INTPTR_MAX -typedef intptr_t consing_ct; -#else -typedef EMACS_INT consing_ct; -#endif -extern consing_ct consing_until_gc; +extern intmax_t consing_until_gc; #ifdef HAVE_PDUMPER extern int number_finalizers_run; #endif -- 2.17.1