diff --git a/src/mzscheme/gc2/mem_account.c b/src/mzscheme/gc2/mem_account.c index ae4d27df2c..9dd94cb0be 100644 --- a/src/mzscheme/gc2/mem_account.c +++ b/src/mzscheme/gc2/mem_account.c @@ -338,7 +338,14 @@ inline static void mark_normal_obj(NewGC *gc, int type, void *ptr) ignore them outright. In the case of custodians, we do need to do the check; those differences are handled by replacing the mark procedure in mark_table. */ - gc->mark_table[*(unsigned short*)ptr](ptr); + unsigned short tag = *(unsigned short*)ptr; + ASSERT_TAG(tag); + if((unsigned long)gc->mark_table[tag] < PAGE_TYPES) { + /* atomic */ + } else { + GC_ASSERT(mark_table[tag]); + gc->mark_table[tag](ptr); + } break; } case PAGE_ATOMIC: break; @@ -403,6 +410,12 @@ static void propagate_accounting_marks(NewGC *gc) PageMap pagemap = gc->page_maps; while(pop_ptr(&p) && !gc->kill_propagation_loop) { page = pagemap_find_page(pagemap, p); +#ifdef MZ_USE_PLACES + if (!page) { + page = pagemap_find_page(MASTERGC->page_maps, p); + } +#endif + GC_ASSERT(page); set_backtrace_source(p, page->page_type); GCDEBUG((DEBUGOUTF, "btc_account: popped off page %p:%p, ptr %p\n", page, page->addr, p)); if(page->size_class) { diff --git a/src/mzscheme/gc2/newgc.c b/src/mzscheme/gc2/newgc.c index 5ca281e6f4..01f571856a 100644 --- a/src/mzscheme/gc2/newgc.c +++ b/src/mzscheme/gc2/newgc.c @@ -1483,7 +1483,7 @@ inline static void mark_stack_initialize() { inline static void push_ptr(void *ptr) { - /* This happens during propoagation if we go past the end of this MarkSegment*/ + /* This happens during propagation if we go past the end of this MarkSegment*/ if(mark_stack->top == MARK_STACK_END(mark_stack)) { /* test to see if we already have another stack page ready */ if(mark_stack->next) { diff --git a/src/mzscheme/src/module.c b/src/mzscheme/src/module.c index a75aabd97f..6169e83f2a 100644 --- a/src/mzscheme/src/module.c +++ b/src/mzscheme/src/module.c @@ -4071,7 +4071,7 @@ static void start_module(Scheme_Module *m, Scheme_Env *env, int restart, Scheme_Object *l, *new_cycle_list; int prep_namespace = 0; - if (SAME_OBJ(m, kernel)) + if (is_builtin_modname(m->modname)) return; for (l = cycle_list; !SCHEME_NULLP(l); l = SCHEME_CDR(l)) {