summaryrefslogtreecommitdiff
path: root/src/alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 5c5252b1ba1..35bdfc8a93a 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -172,10 +172,14 @@ EMACS_INT misc_objects_consed;
EMACS_INT intervals_consed;
EMACS_INT strings_consed;
-/* Number of bytes of consing since GC before another GC should be done. */
+/* Minimum number of bytes of consing since GC before next GC. */
+
+EMACS_INT gc_cons_threshold;
+
+/* Similar minimum, computed from Vgc_cons_percentage. */
+
+EMACS_INT gc_relative_threshold;
-static EMACS_INT gc_cons_threshold;
-EMACS_INT gc_cons_combined_threshold;
static Lisp_Object Vgc_cons_percentage;
/* Nonzero during GC. */
@@ -4856,12 +4860,10 @@ returns nil, because real GC can't be done. */)
if (gc_cons_threshold < 10000)
gc_cons_threshold = 10000;
- gc_cons_combined_threshold = gc_cons_threshold;
-
if (FLOATP (Vgc_cons_percentage))
{ /* Set gc_cons_combined_threshold. */
EMACS_INT total = 0;
- EMACS_INT threshold;
+
total += total_conses * sizeof (struct Lisp_Cons);
total += total_symbols * sizeof (struct Lisp_Symbol);
total += total_markers * sizeof (union Lisp_Misc);
@@ -4871,10 +4873,10 @@ returns nil, because real GC can't be done. */)
total += total_intervals * sizeof (struct interval);
total += total_strings * sizeof (struct Lisp_String);
- threshold = total * XFLOAT_DATA (Vgc_cons_percentage);
- if (threshold > gc_cons_combined_threshold)
- gc_cons_combined_threshold = threshold;
+ gc_relative_threshold = total * XFLOAT_DATA (Vgc_cons_percentage);
}
+ else
+ gc_relative_threshold = 0;
if (garbage_collection_messages)
{
@@ -5965,7 +5967,8 @@ init_alloc_once ()
staticidx = 0;
consing_since_gc = 0;
gc_cons_threshold = 100000 * sizeof (Lisp_Object);
- gc_cons_combined_threshold = gc_cons_threshold;
+ gc_relative_threshold = 0;
+
#ifdef VIRT_ADDR_VARIES
malloc_sbrk_unused = 1<<22; /* A large number */
malloc_sbrk_used = 100000; /* as reasonable as any number */