diff options
| author | Mike Pall <mike> | 2014-04-22 11:26:52 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2014-04-22 11:26:52 +0200 |
| commit | 2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c (patch) | |
| tree | c8ad75a38cfbfeaa5d4723f06b5e0a13211c30b3 | |
| parent | 18309b0a25babe1a7d601d2ee92ce1dba1859ef9 (diff) | |
| download | luajit-2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c.tar.gz luajit-2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c.tar.bz2 luajit-2715fe3aee7c8202b4b5d04748d1c5faa6d8fd9c.zip | |
Prevent GC estimate miscalculation due to buffer growth.
| -rw-r--r-- | src/lj_gc.c | 4 |
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: |
