diff --git a/src/lj_gc.c b/src/lj_gc.c index 9c0d6797..25374d03 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c @@ -564,12 +564,11 @@ void lj_gc_finalize_cdata(lua_State *L) /* Free all remaining GC objects. */ void lj_gc_freeall(global_State *g) { - MSize i, strmask; + MSize i; /* Free everything, except super-fixed objects (the main thread). */ g->gc.currentwhite = LJ_GC_WHITES | LJ_GC_SFIXED; gc_fullsweep(g, &g->gc.root); - strmask = g->strmask; - for (i = 0; i <= strmask; i++) /* Free all string hash chains. */ + for (i = g->strmask; i != ~(MSize)0; i--) /* Free all string hash chains. */ gc_fullsweep(g, &g->strhash[i]); }