Use fork instead of timeout 0, see #873

This commit is contained in:
Cloud Wu
2018-08-07 14:55:26 +08:00
parent d2ab6863e3
commit 281acf4c71

View File

@@ -193,7 +193,7 @@ function suspend(co, result, command, param, param2)
session_coroutine_address[co] = nil session_coroutine_address[co] = nil
session_coroutine_tracetag[co] = nil session_coroutine_tracetag[co] = nil
end end
skynet.timeout(0,function() end) -- trigger command "SUSPEND" skynet.fork(function() end) -- trigger command "SUSPEND"
error(debug.traceback(co,tostring(command))) error(debug.traceback(co,tostring(command)))
end end
if command == "SUSPEND" then if command == "SUSPEND" then
@@ -540,10 +540,14 @@ function skynet.dispatch_unknown_response(unknown)
end end
function skynet.fork(func,...) function skynet.fork(func,...)
local args = table.pack(...) local n = select("#", ...)
local co = co_create(function() local co
func(table.unpack(args,1,args.n)) if n == 0 then
end) co = co_create(func)
else
local args = { ... }
co = co_create(function() func(table.unpack(args,1,n)) end)
end
table.insert(fork_queue, co) table.insert(fork_queue, co)
return co return co
end end