summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2019-08-13 12:20:40 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2019-08-13 12:22:30 -0700
commitb80559be212292d44ce14ca5e94505cab4d9a868 (patch)
treed32c29befdc953b97eaf643c945a37341d340519
parenta354736e1dfe5a7e4ddbb1ee7f1373be2b5bbe09 (diff)
downloademacs-b80559be212292d44ce14ca5e94505cab4d9a868.tar.gz
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.
-rw-r--r--src/alloc.c16
-rw-r--r--src/lisp.h8
2 files changed, 9 insertions, 15 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 7bed3f4488d..14b0a7b8381 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 043f2f738e4..0370c52fad6 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