summaryrefslogtreecommitdiff
path: root/libguile/gc-freelist.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/gc-freelist.c')
-rw-r--r--libguile/gc-freelist.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/libguile/gc-freelist.c b/libguile/gc-freelist.c
index 8425a6eea..1b9780531 100644
--- a/libguile/gc-freelist.c
+++ b/libguile/gc-freelist.c
@@ -138,6 +138,11 @@ scm_init_freelist (scm_t_cell_type_statistics *freelist,
int span,
int min_yield)
{
+ if (min_yield < 1)
+ min_yield = 1;
+ if (min_yield > 99)
+ min_yield = 99;
+
freelist->heap_segment_idx = -1;
freelist->min_yield = 0;
freelist->min_yield_fraction = min_yield;
@@ -158,10 +163,9 @@ scm_init_freelist (scm_t_cell_type_statistics *freelist,
void
scm_gc_init_freelist (void)
{
- size_t init_heap_size_1
+ int init_heap_size_1
= scm_getenv_int ("GUILE_INIT_SEGMENT_SIZE_1", SCM_DEFAULT_INIT_HEAP_SIZE_1);
-
- size_t init_heap_size_2
+ int init_heap_size_2
= scm_getenv_int ("GUILE_INIT_SEGMENT_SIZE_2", SCM_DEFAULT_INIT_HEAP_SIZE_2);
scm_i_freelist = SCM_EOL;
@@ -172,12 +176,14 @@ scm_gc_init_freelist (void)
scm_init_freelist (&scm_i_master_freelist, 1,
scm_getenv_int ("GUILE_MIN_YIELD_1", SCM_DEFAULT_MIN_YIELD_1));
-
scm_max_segment_size = scm_getenv_int ("GUILE_MAX_SEGMENT_SIZE", SCM_DEFAULT_MAX_SEGMENT_SIZE);
+
+ if (scm_max_segment_size <= 0)
+ scm_max_segment_size = SCM_DEFAULT_MAX_SEGMENT_SIZE;
+
scm_i_make_initial_segment (init_heap_size_1, &scm_i_master_freelist);
scm_i_make_initial_segment (init_heap_size_2, &scm_i_master_freelist2);
-
#if (SCM_ENABLE_DEPRECATED == 1)
if ( scm_default_init_heap_size_1 ||