commit 0e60572606684458b18febfcef0bc68235b461f4
parent 621ef9f7675829234e75b0b3e73afc7a1a74aa16
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Wed, 19 Jan 2005 15:03:25 -0200
values holded in open upvalues of suspended threads may be
incorrectly collected
Diffstat:
M | bugs | | | 39 | +++++++++++++++++++++++++++++++++++++++ |
1 file changed, 39 insertions(+), 0 deletions(-)
diff --git a/bugs b/bugs
@@ -428,6 +428,7 @@ patch = [[
]],
}
+
Bug{
what = [[`pc' address is invalidated when a coroutine is suspended]],
example = [[
@@ -704,3 +705,41 @@ patch = [[
]]
}
+
+Bug{
+what = [[values holded in open upvalues of suspended threads may be
+incorrectly collected]],
+
+report = [[Spencer Schumann, 31/12/2004]],
+
+example = [[
+local thread_id = 0
+local threads = {}
+
+function fn(thread)
+ thread_id = thread_id + 1
+ threads[thread_id] = function()
+ thread = nil
+ end
+ coroutine.yield()
+end
+
+while true do
+ local thread = coroutine.create(fn)
+ coroutine.resume(thread, thread)
+end
+]],
+
+patch = [[
+* lgc.c:
+221,224c221,222
+< if (!u->marked) {
+< markobject(st, &u->value);
+< u->marked = 1;
+< }
+---
+> markobject(st, u->v);
+> u->marked = 1;
+]],
+}
+