diff --git a/lgc.c b/lgc.c index 8cb3e9fa..e9189ac3 100644 --- a/lgc.c +++ b/lgc.c @@ -1423,6 +1423,7 @@ static lu_mem atomic (lua_State *L) { /* registry and global metatables may be changed by API */ markvalue(g, &g->l_registry); markmt(g); /* mark global metatables */ + work += propagateall(g); /* empties 'gray' list */ /* remark occasional upvalues of (maybe) dead threads */ work += remarkupvals(g); work += propagateall(g); /* propagate changes */ @@ -1486,8 +1487,7 @@ static lu_mem singlestep (lua_State *L) { return propagatemark(g); /* traverse one gray object */ } case GCSenteratomic: { - lu_mem work = propagateall(g); /* make sure gray list is empty */ - work += atomic(L); /* work is what was traversed by 'atomic' */ + lu_mem work = atomic(L); /* work is what was traversed by 'atomic' */ entersweep(L); g->GCestimate = gettotalbytes(g); /* first estimate */; return work;