diff options
-rw-r--r-- | src/lj_gc.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/lj_gc.c b/src/lj_gc.c index b35a0d44..2fc52ec1 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c | |||
@@ -700,9 +700,12 @@ static size_t gc_onestep(lua_State *L) | |||
700 | } | 700 | } |
701 | case GCSfinalize: | 701 | case GCSfinalize: |
702 | if (gcref(g->gc.mmudata) != NULL) { | 702 | if (gcref(g->gc.mmudata) != NULL) { |
703 | GCSize old = g->gc.total; | ||
703 | if (tvref(g->jit_base)) /* Don't call finalizers on trace. */ | 704 | if (tvref(g->jit_base)) /* Don't call finalizers on trace. */ |
704 | return LJ_MAX_MEM; | 705 | return LJ_MAX_MEM; |
705 | gc_finalize(L); /* Finalize one userdata object. */ | 706 | gc_finalize(L); /* Finalize one userdata object. */ |
707 | if (old >= g->gc.total && g->gc.estimate > old - g->gc.total) | ||
708 | g->gc.estimate -= old - g->gc.total; | ||
706 | if (g->gc.estimate > GCFINALIZECOST) | 709 | if (g->gc.estimate > GCFINALIZECOST) |
707 | g->gc.estimate -= GCFINALIZECOST; | 710 | g->gc.estimate -= GCFINALIZECOST; |
708 | return GCFINALIZECOST; | 711 | return GCFINALIZECOST; |