From 0e60572606684458b18febfcef0bc68235b461f4 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Wed, 19 Jan 2005 15:03:47 -0200 Subject: [PATCH] values holded in open upvalues of suspended threads may be incorrectly collected --- bugs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/bugs b/bugs index d4cae38d..efff0bbe 100644 --- 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; +]], +} +