summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-09-01 13:55:08 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-09-01 13:55:08 -0300
commitf59b241315049c73e2b755bf5fb238bff323c3d3 (patch)
tree25e74b3b8fbe20a0bc7ada4898bffbf5fa5ac41f
parent8efe9f23faecbb0892a453c6fb503747c7dbb004 (diff)
downloadlua-f59b241315049c73e2b755bf5fb238bff323c3d3.tar.gz
lua-f59b241315049c73e2b755bf5fb238bff323c3d3.tar.bz2
lua-f59b241315049c73e2b755bf5fb238bff323c3d3.zip
Bug: Ephemeron table can wrongly collect entry with strong key
-rw-r--r--lgc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lgc.c b/lgc.c
index 7ee19881..9e77f9b3 100644
--- a/lgc.c
+++ b/lgc.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lgc.c,v 2.140.1.1 2013/04/12 18:48:47 roberto Exp roberto $ 2** $Id: lgc.c,v 2.140.1.2 2013/04/26 18:22:05 roberto Exp roberto $
3** Garbage Collector 3** Garbage Collector
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -403,7 +403,7 @@ static int traverseephemeron (global_State *g, Table *h) {
403 reallymarkobject(g, gcvalue(gval(n))); /* mark it now */ 403 reallymarkobject(g, gcvalue(gval(n))); /* mark it now */
404 } 404 }
405 } 405 }
406 if (prop) 406 if (g->gcstate != GCSatomic || prop)
407 linktable(h, &g->ephemeron); /* have to propagate again */ 407 linktable(h, &g->ephemeron); /* have to propagate again */
408 else if (hasclears) /* does table have white keys? */ 408 else if (hasclears) /* does table have white keys? */
409 linktable(h, &g->allweak); /* may have to clean white keys */ 409 linktable(h, &g->allweak); /* may have to clean white keys */