From dac04e9fb9fe0fcd39a375b57f8380e1798c7ef7 Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 5 Sep 2002 21:55:33 +0000 Subject: * gc-segment.c (scm_i_make_initial_segment): check user settings for sanity. * gc-malloc.c (scm_gc_init_malloc): check user settings for sanity. (scm_gc_register_collectable_memory): prevent overflow of memory counts. * gc-freelist.c (scm_init_freelist): check user settings for sanity. * gc-malloc.c (scm_gc_register_collectable_memory): use floats; these won't ever wrap around with high memory usage. * gc-freelist.c: include * gc-malloc.c: add DEBUGINFO for mtrigger GCs. --- libguile/gc-malloc.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'libguile/gc-malloc.c') diff --git a/libguile/gc-malloc.c b/libguile/gc-malloc.c index 2f39db0da..9703051db 100644 --- a/libguile/gc-malloc.c +++ b/libguile/gc-malloc.c @@ -106,6 +106,14 @@ scm_gc_init_malloc (void) SCM_DEFAULT_INIT_MALLOC_LIMIT); scm_i_minyield_malloc = scm_getenv_int ("GUILE_MIN_YIELD_MALLOC", SCM_DEFAULT_MALLOC_MINYIELD); + + if (scm_i_minyield_malloc >= 100) + scm_i_minyield_malloc = 99; + if (scm_i_minyield_malloc < 1) + scm_i_minyield_malloc = 1; + + if (scm_mtrigger < 0) + scm_mtrigger = SCM_DEFAULT_INIT_MALLOC_LIMIT; } @@ -226,7 +234,10 @@ scm_gc_register_collectable_memory (void *mem, size_t size, const char *what) Instead of getting bogged down, we let the mtrigger grow strongly with it. */ - scm_mtrigger = (scm_mallocated * 110) / (100 - scm_i_minyield_malloc); + float no_overflow_trigger = (float)(scm_mallocated * 110); + + no_overflow_trigger /= (float) (100 - scm_i_minyield_malloc); + scm_mtrigger = (unsigned long) no_overflow_trigger; #ifdef DEBUGINFO fprintf (stderr, "Mtrigger sweep: ineffective. New trigger %d\n", scm_mtrigger); -- cgit v1.2.3