diff --git a/C/agc.c b/C/agc.c index 399e098a9..9237d3d76 100644 --- a/C/agc.c +++ b/C/agc.c @@ -227,18 +227,20 @@ mark_atoms(void) static void mark_trail(void) { - register CELL *pt; + register tr_fr_ptr pt; - pt = (CELL *)TR; + pt = TR; /* moving the trail is simple */ - while (pt != (CELL *)Yap_TrailBase) { - register CELL reg = pt[-1]; - pt--; + while (pt != (tr_fr_ptr)Yap_TrailBase) { + CELL reg = TrailTerm(pt-1); + if (!IsVarTerm(reg)) { if (IsAtomTerm(reg)) { MarkAtomEntry(RepAtom(AtomOfTerm(reg))); } } + + pt--; } } @@ -254,12 +256,16 @@ mark_local(void) CELL reg = *--pt; if (!IsVarTerm(reg)) { - if (IsAtomTerm(reg)) { + if (IsAtomTerm(reg) +#if TABLING + /* assume we cannot have atoms on first page, + so this must be an arity + */ + && reg > Yap_page_size +#endif + ) { MarkAtomEntry(RepAtom(AtomOfTerm(reg))); } - } else if (IsApplTerm(reg)) { - Functor f = FunctorOfTerm(reg); - FuncAdjust(f); } } } diff --git a/C/heapgc.c b/C/heapgc.c index 259a8cb1c..64880a6a6 100644 --- a/C/heapgc.c +++ b/C/heapgc.c @@ -3772,7 +3772,6 @@ call_gc(UInt gc_lim, Int predarity, CELL *current_env, yamop *nextop) (ASP-H0)*sizeof(CELL) > gc_lim && H-H0 > (LCL0-ASP)/2) { effectiveness = do_gc(predarity, current_env, nextop); - Yap_atom_gc(); if (effectiveness < 0) return FALSE; if (effectiveness > 90) {