Open
Description
When I create a coroutine using coroutine.wrap and then resume it, coroutine.resume skips the first "status" value and returns all other values. As docs says it must return the first "status" boolean value.
I use openresty from AUR: aur/openresty 1.27.1.1-1
$ curl http://localhost:8080/1
2, nil, 3, nil, false, cannot resume dead coroutine
$ curl http://localhost:8080/2
true, 2, true, 3, false, cannot resume dead coroutine
worker_processes 1;
error_log error.log notice;
pid nginx.pid;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
lua_code_cache off;
location /1 {
content_by_lua_block {
local co
local function f()
co = coroutine.running()
coroutine.yield(1)
coroutine.yield(2)
return 3
end
assert(coroutine.wrap(f)() == 1)
local ok1, ret1 = coroutine.resume(co)
local ok2, ret2 = coroutine.resume(co)
local ok3, ret3 = coroutine.resume(co)
ngx.say(("%s, %s, %s, %s, %s, %s"):format(
ok1, ret1, ok2, ret2, ok3, ret3
))
}
}
location /2 {
content_by_lua_block {
local co
local function f()
co = coroutine.running()
coroutine.yield(1)
coroutine.yield(2)
return 3
end
do
local c = coroutine.create(f)
local ok, v = assert(coroutine.resume(c))
assert(v == 1)
end
local ok1, ret1 = coroutine.resume(co)
local ok2, ret2 = coroutine.resume(co)
local ok3, ret3 = coroutine.resume(co)
ngx.say(("%s, %s, %s, %s, %s, %s"):format(
ok1, ret1, ok2, ret2, ok3, ret3
))
}
}
}
}
Metadata
Metadata
Assignees
Labels
No labels