* Fized a bug in the collector that caused tconc pages to never get
deallocated. Tconc pages are now allocated from generation 1.
This commit is contained in:
parent
a6302bc57d
commit
41e1859b2b
BIN
bin/ikarus
BIN
bin/ikarus
Binary file not shown.
|
@ -230,7 +230,13 @@ gc_tconc_push_extending(gc_t* gc, ikp tcbucket){
|
|||
p->next = gc->tconc_queue;
|
||||
gc->tconc_queue = p;
|
||||
}
|
||||
ikp ap = ik_mmap(pagesize);
|
||||
/* Wrong MR! */
|
||||
ikp ap =
|
||||
ik_mmap_typed(pagesize,
|
||||
meta_mt[meta_ptrs] | next_gen_tag[0],
|
||||
gc->pcb);
|
||||
gc->segment_vector = gc->pcb->segment_vector;
|
||||
bzero(ap, pagesize);
|
||||
ikp nap = ap + wordsize;
|
||||
gc->tconc_base = ap;
|
||||
gc->tconc_ap = nap;
|
||||
|
@ -1770,6 +1776,7 @@ add_one_tconc(ikpcb* pcb, ikp tcbucket){
|
|||
assert(tagof(tc) == pair_tag);
|
||||
ikp d = ref(tc, off_cdr);
|
||||
assert(tagof(d) == pair_tag);
|
||||
/* Wrong MR! */
|
||||
ikp new_pair = ik_alloc(pcb, pair_size) + pair_tag;
|
||||
ref(d, off_car) = tcbucket;
|
||||
ref(d, off_cdr) = new_pair;
|
||||
|
@ -1801,6 +1808,7 @@ gc_add_tconcs(gc_t* gc){
|
|||
ikp q = p + qu->size;
|
||||
while(p < q){
|
||||
add_one_tconc(pcb, ref(p,0));
|
||||
ref(p,0) = 0;
|
||||
p += wordsize;
|
||||
}
|
||||
ikpages* next = qu->next;
|
||||
|
|
Loading…
Reference in New Issue