summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2014-04-22 11:26:52 +0200
committerMike Pall <mike>2014-04-22 11:26:52 +0200
commit2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c (patch)
treec8ad75a38cfbfeaa5d4723f06b5e0a13211c30b3
parent18309b0a25babe1a7d601d2ee92ce1dba1859ef9 (diff)
downloadluajit-2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c.tar.gz
luajit-2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c.tar.bz2
luajit-2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c.zip
Prevent GC estimate miscalculation due to buffer growth.
-rw-r--r--src/lj_gc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lj_gc.c b/src/lj_gc.c
index c2bc397d..c856df4d 100644
--- a/src/lj_gc.c
+++ b/src/lj_gc.c
@@ -631,6 +631,8 @@ static size_t gc_onestep(lua_State *L)
631 case GCSsweep: { 631 case GCSsweep: {
632 MSize old = g->gc.total; 632 MSize old = g->gc.total;
633 setmref(g->gc.sweep, gc_sweep(g, mref(g->gc.sweep, GCRef), GCSWEEPMAX)); 633 setmref(g->gc.sweep, gc_sweep(g, mref(g->gc.sweep, GCRef), GCSWEEPMAX));
634 lua_assert(old >= g->gc.total);
635 g->gc.estimate -= old - g->gc.total;
634 if (gcref(*mref(g->gc.sweep, GCRef)) == NULL) { 636 if (gcref(*mref(g->gc.sweep, GCRef)) == NULL) {
635 gc_shrink(g, L); 637 gc_shrink(g, L);
636 if (gcref(g->gc.mmudata)) { /* Need any finalizations? */ 638 if (gcref(g->gc.mmudata)) { /* Need any finalizations? */
@@ -643,8 +645,6 @@ static size_t gc_onestep(lua_State *L)
643 g->gc.debt = 0; 645 g->gc.debt = 0;
644 } 646 }
645 } 647 }
646 lua_assert(old >= g->gc.total);
647 g->gc.estimate -= old - g->gc.total;
648 return GCSWEEPMAX*GCSWEEPCOST; 648 return GCSWEEPMAX*GCSWEEPCOST;
649 } 649 }
650 case GCSfinalize: 650 case GCSfinalize: