summaryrefslogtreecommitdiff
path: root/libguile/gc-malloc.c
diff options
context:
space:
mode:
authorHan-Wen Nienhuys <hanwen@lilypond.org>2002-09-05 21:55:33 +0000
committerHan-Wen Nienhuys <hanwen@lilypond.org>2002-09-05 21:55:33 +0000
commitdac04e9fb9fe0fcd39a375b57f8380e1798c7ef7 (patch)
tree670617a4d40d13a090b543c5b5984dff1b61fbf5 /libguile/gc-malloc.c
parentffd724008bab4ee230af0a9210b19166b2c04f71 (diff)
downloadguile-dac04e9fb9fe0fcd39a375b57f8380e1798c7ef7.tar.gz
* 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 <stdio.h> * gc-malloc.c: add DEBUGINFO for mtrigger GCs.
Diffstat (limited to 'libguile/gc-malloc.c')
-rw-r--r--libguile/gc-malloc.c13
1 files changed, 12 insertions, 1 deletions
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);