|
@@ -700,9 +700,12 @@ static size_t gc_onestep(lua_State *L)
|
|
|
}
|
|
|
case GCSfinalize:
|
|
|
if (gcref(g->gc.mmudata) != NULL) {
|
|
|
+ GCSize old = g->gc.total;
|
|
|
if (tvref(g->jit_base)) /* Don't call finalizers on trace. */
|
|
|
return LJ_MAX_MEM;
|
|
|
gc_finalize(L); /* Finalize one userdata object. */
|
|
|
+ if (old >= g->gc.total && g->gc.estimate > old - g->gc.total)
|
|
|
+ g->gc.estimate -= old - g->gc.total;
|
|
|
if (g->gc.estimate > GCFINALIZECOST)
|
|
|
g->gc.estimate -= GCFINALIZECOST;
|
|
|
return GCFINALIZECOST;
|