From ad0765b4f01706c367e0e2f431c2043021b9361d Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 24 May 2006 11:33:49 -0300 Subject: [PATCH] subtle problem with the garbage collector --- bugs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/bugs b/bugs index a65f5474..878117b1 100644 --- a/bugs +++ b/bugs @@ -925,7 +925,7 @@ patch = [[ } -@Bug{ +Bug{ what = [[lua_dostring/lua_dofile should return any values returned by the chunk]], @@ -946,3 +946,31 @@ patch = [[ ]], } + + +Bug{ + +what = [[garbage collector does not compensate enough for finalizers]], + +patch = [[ +lgc.c: +@@ -322,4 +322,6 @@ + +-static void propagateall (global_State *g) { +- while (g->gray) propagatemark(g); ++static size_t propagateall (global_State *g) { ++ size_t m = 0; ++ while (g->gray) m += propagatemark(g); ++ return m; + } +@@ -542,3 +544,3 @@ + marktmu(g); /* mark `preserved' userdata */ +- propagateall(g); /* remark, to propagate `preserveness' */ ++ udsize += propagateall(g); /* remark, to propagate `preserveness' */ + cleartable(g->weak); /* remove collected objects from weak tables */ +@@ -592,2 +594,4 @@ + GCTM(L); ++ if (g->estimate > GCFINALIZECOST) ++ g->estimate -= GCFINALIZECOST; +]] +}