From cb19ab54e928fdd0fd6b47badecb7825942b808e Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Mon, 13 Mar 2017 17:01:41 +0800 Subject: [PATCH] keep skynet.wakeup order, see issue #587 --- lualib/skynet.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lualib/skynet.lua b/lualib/skynet.lua index 202e4964..a40eff36 100644 --- a/lualib/skynet.lua +++ b/lualib/skynet.lua @@ -5,6 +5,7 @@ local coroutine = coroutine local assert = assert local pairs = pairs local pcall = pcall +local table = table local profile = require "profile" @@ -46,7 +47,7 @@ local session_coroutine_address = {} local session_response = {} local unresponse = {} -local wakeup_session = {} +local wakeup_queue = {} local sleep_session = {} local watching_service = {} @@ -116,9 +117,8 @@ local function co_create(f) end local function dispatch_wakeup() - local co = next(wakeup_session) + local co = table.remove(wakeup_queue,1) if co then - wakeup_session[co] = nil local session = sleep_session[co] if session then session_id_coroutine[session] = "BREAK" @@ -414,8 +414,8 @@ function skynet.retpack(...) end function skynet.wakeup(co) - if sleep_session[co] and wakeup_session[co] == nil then - wakeup_session[co] = true + if sleep_session[co] then + table.insert(wakeup_queue, co) return true end end