diff options
author | Han-Wen Nienhuys <hanwen@lilypond.org> | 2002-09-05 21:12:21 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@lilypond.org> | 2002-09-05 21:12:21 +0000 |
commit | ffd724008bab4ee230af0a9210b19166b2c04f71 (patch) | |
tree | 1c76aa2025f57bd02b222271f07dfc9f174470b3 /libguile/gc-segment.c | |
parent | 5bd4a949e87dce0abf8d140e2d9f2ca4ce808727 (diff) | |
download | guile-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.c | 13 |
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]; |