fix place-GC problem with empty_self_modidx's shift cache
This commit is contained in:
parent
851cbf4fcc
commit
eae7c5d5d7
|
@ -2987,6 +2987,24 @@ void GC_mark2(const void *const_p, struct NewGC *gc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (page->size_class < 2) {
|
||||||
|
if (page->page_type == PAGE_TAGGED) {
|
||||||
|
void *q;
|
||||||
|
if (page->size_class)
|
||||||
|
q = MED_OBJHEAD(p, page->size) + 1;
|
||||||
|
else
|
||||||
|
q = p;
|
||||||
|
if (((objhead *)q)[-1].type == PAGE_TAGGED) {
|
||||||
|
if (!((objhead *)q)[-1].moved) {
|
||||||
|
if ((*(short *)q < 0) || (*(short *)q > 1000))
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef NEWGC_BTC_ACCOUNT
|
#ifdef NEWGC_BTC_ACCOUNT
|
||||||
/* toss this over to the BTC mark routine if we're doing accounting */
|
/* toss this over to the BTC mark routine if we're doing accounting */
|
||||||
if(gc->doing_memory_accounting) {
|
if(gc->doing_memory_accounting) {
|
||||||
|
|
|
@ -3435,7 +3435,8 @@ static Scheme_Object *do_modidx_shift(Scheme_Object *modidx,
|
||||||
i = 0;
|
i = 0;
|
||||||
} else {
|
} else {
|
||||||
/* May have GCed: */
|
/* May have GCed: */
|
||||||
if (cvec && !sbm->shift_cache)
|
if (cvec && !sbm->shift_cache
|
||||||
|
&& !SAME_OBJ((Scheme_Object *)sbm, empty_self_modidx))
|
||||||
sbm->shift_cache = cvec;
|
sbm->shift_cache = cvec;
|
||||||
|
|
||||||
if (i >= c) {
|
if (i >= c) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user