summaryrefslogtreecommitdiff
path: root/libguile/gc-segment.c
diff options
context:
space:
mode:
authorHan-Wen Nienhuys <hanwen@lilypond.org>2002-09-05 21:12:21 +0000
committerHan-Wen Nienhuys <hanwen@lilypond.org>2002-09-05 21:12:21 +0000
commitffd724008bab4ee230af0a9210b19166b2c04f71 (patch)
tree1c76aa2025f57bd02b222271f07dfc9f174470b3 /libguile/gc-segment.c
parent5bd4a949e87dce0abf8d140e2d9f2ca4ce808727 (diff)
downloadguile-ffd724008bab4ee230af0a9210b19166b2c04f71.tar.gz
* struct.h: change scm_structs_to_free to scm_i_structs_to_free
* gc-malloc.c (scm_gc_register_collectable_memory): use floats; these won't ever wrap around with high memory usage. * gc-malloc.c: add DEBUGINFO for mtrigger GCs.
Diffstat (limited to 'libguile/gc-segment.c')
-rw-r--r--libguile/gc-segment.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/libguile/gc-segment.c b/libguile/gc-segment.c
index 2cdbef2aa..ec0c2cf80 100644
--- a/libguile/gc-segment.c
+++ b/libguile/gc-segment.c
@@ -296,7 +296,7 @@ scm_i_insert_segment (scm_t_heap_segment * seg)
highest_cell = SCM_MAX (highest_cell, seg->bounds[1]);
}
-
+
{
int i = 0;
int j = 0;
@@ -304,6 +304,17 @@ scm_i_insert_segment (scm_t_heap_segment * seg)
while (i < scm_i_heap_segment_table_size
&& scm_i_heap_segment_table[i]->bounds[0] <= seg->bounds[0])
i++;
+
+ /*
+ We insert a new entry; if that happens to be before the
+ "current" segment of a freelist, we must move the freelist index
+ as well.
+ */
+ if (scm_i_master_freelist.heap_segment_idx >= i)
+ scm_i_master_freelist.heap_segment_idx ++;
+ if (scm_i_master_freelist2.heap_segment_idx >= i)
+ scm_i_master_freelist2.heap_segment_idx ++;
+
for (j = scm_i_heap_segment_table_size; j > i; --j)
scm_i_heap_segment_table[j] = scm_i_heap_segment_table[j - 1];