diff --git a/lualib/skynet/queue.lua b/lualib/skynet/queue.lua index 3db244e3..1df1a6bb 100644 --- a/lualib/skynet/queue.lua +++ b/lualib/skynet/queue.lua @@ -8,6 +8,19 @@ function skynet.queue() local current_thread local ref = 0 local thread_queue = {} + + local function xpcall_ret(ok, ...) + ref = ref - 1 + if ref == 0 then + current_thread = table.remove(thread_queue,1) + if current_thread then + skynet.wakeup(current_thread) + end + end + assert(ok, (...)) + return ... + end + return function(f, ...) local thread = coroutine.running() if current_thread and current_thread ~= thread then @@ -18,15 +31,7 @@ function skynet.queue() current_thread = thread ref = ref + 1 - local ok, err = xpcall(f, traceback, ...) - ref = ref - 1 - if ref == 0 then - current_thread = table.remove(thread_queue,1) - if current_thread then - skynet.wakeup(current_thread) - end - end - assert(ok,err) + return xpcall_ret(xpcall(f, traceback, ...)) end end