aboutsummaryrefslogtreecommitdiff
path: root/testes/coroutine.lua
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-12-18 11:22:42 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2020-12-18 11:22:42 -0300
commit409256b7849ec5ab3296cb0ab9eba3d65955d5ea (patch)
tree13d6327093e900cab0b23c4d09f344a281630c73 /testes/coroutine.lua
parentb17178b27a55bd5eeb51538bec935972fd58f1ea (diff)
downloadlua-409256b7849ec5ab3296cb0ab9eba3d65955d5ea.tar.gz
lua-409256b7849ec5ab3296cb0ab9eba3d65955d5ea.tar.bz2
lua-409256b7849ec5ab3296cb0ab9eba3d65955d5ea.zip
'coroutine.close'/'lua_resetthread' report original errors
Besides errors in closing methods, 'coroutine.close' and 'lua_resetthread' also consider the original error that stopped the thread, if any.
Diffstat (limited to 'testes/coroutine.lua')
-rw-r--r--testes/coroutine.lua10
1 files changed, 9 insertions, 1 deletions
diff --git a/testes/coroutine.lua b/testes/coroutine.lua
index 5b927151..aaf565fb 100644
--- a/testes/coroutine.lua
+++ b/testes/coroutine.lua
@@ -134,7 +134,8 @@ do
134 local co = coroutine.create(print) 134 local co = coroutine.create(print)
135 assert(coroutine.resume(co, "testing 'coroutine.close'")) 135 assert(coroutine.resume(co, "testing 'coroutine.close'"))
136 assert(coroutine.status(co) == "dead") 136 assert(coroutine.status(co) == "dead")
137 assert(coroutine.close(co)) 137 local st, msg = coroutine.close(co)
138 assert(st and msg == nil)
138 139
139 -- cannot close the running coroutine 140 -- cannot close the running coroutine
140 local st, msg = pcall(coroutine.close, coroutine.running()) 141 local st, msg = pcall(coroutine.close, coroutine.running())
@@ -151,6 +152,13 @@ do
151 -- to-be-closed variables in coroutines 152 -- to-be-closed variables in coroutines
152 local X 153 local X
153 154
155 -- closing a coroutine after an error
156 local co = coroutine.create(error)
157 local st, msg = coroutine.resume(co, 100)
158 assert(not st and msg == 100)
159 st, msg = coroutine.close(co)
160 assert(not st and msg == 100)
161
154 co = coroutine.create(function () 162 co = coroutine.create(function ()
155 local x <close> = func2close(function (self, err) 163 local x <close> = func2close(function (self, err)
156 assert(err == nil); X = false 164 assert(err == nil); X = false