From 9a8a9fd6372b270eb7f92428aea25a0c17546ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Wed, 30 Oct 2013 19:45:41 +0800 Subject: [PATCH] use pcall in message queue dispatch --- lualib/mqueue.lua | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lualib/mqueue.lua b/lualib/mqueue.lua index bc866b63..681001b0 100644 --- a/lualib/mqueue.lua +++ b/lualib/mqueue.lua @@ -20,6 +20,18 @@ skynet.register_protocol { end } +local function report_error(succ, ...) + if succ then + return ... + else + print("Message queue dispatch error: ", ...) + end +end + +local function do_func(f, msg) + return report_error(pcall(f, table.unpack(msg))) +end + local function message_dispatch(f) while true do if #message_queue==0 then @@ -29,9 +41,9 @@ local function message_dispatch(f) local msg = table.remove(message_queue,1) local session = msg.session if session == 0 then - assert(f(table.unpack(msg))==nil, "message in queue returns value") + assert(do_func(f, msg) == nil, "message in queue returns value") else - local data, size = skynet.pack(f(table.unpack(msg))) + local data, size = skynet.pack(do_func(f,msg)) -- 1 means response c.send(msg.addr, 1, session, data, size) end