* 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;
|
p->next = gc->tconc_queue;
|
||||||
gc->tconc_queue = p;
|
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;
|
ikp nap = ap + wordsize;
|
||||||
gc->tconc_base = ap;
|
gc->tconc_base = ap;
|
||||||
gc->tconc_ap = nap;
|
gc->tconc_ap = nap;
|
||||||
|
@ -1770,6 +1776,7 @@ add_one_tconc(ikpcb* pcb, ikp tcbucket){
|
||||||
assert(tagof(tc) == pair_tag);
|
assert(tagof(tc) == pair_tag);
|
||||||
ikp d = ref(tc, off_cdr);
|
ikp d = ref(tc, off_cdr);
|
||||||
assert(tagof(d) == pair_tag);
|
assert(tagof(d) == pair_tag);
|
||||||
|
/* Wrong MR! */
|
||||||
ikp new_pair = ik_alloc(pcb, pair_size) + pair_tag;
|
ikp new_pair = ik_alloc(pcb, pair_size) + pair_tag;
|
||||||
ref(d, off_car) = tcbucket;
|
ref(d, off_car) = tcbucket;
|
||||||
ref(d, off_cdr) = new_pair;
|
ref(d, off_cdr) = new_pair;
|
||||||
|
@ -1801,6 +1808,7 @@ gc_add_tconcs(gc_t* gc){
|
||||||
ikp q = p + qu->size;
|
ikp q = p + qu->size;
|
||||||
while(p < q){
|
while(p < q){
|
||||||
add_one_tconc(pcb, ref(p,0));
|
add_one_tconc(pcb, ref(p,0));
|
||||||
|
ref(p,0) = 0;
|
||||||
p += wordsize;
|
p += wordsize;
|
||||||
}
|
}
|
||||||
ikpages* next = qu->next;
|
ikpages* next = qu->next;
|
||||||
|
|
Loading…
Reference in New Issue