From 6c3e969e913e2e38c112f7eaded3d497e0eaa8b0 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Mon, 19 Oct 2020 10:55:32 +0800 Subject: [PATCH 1/2] shutdown read while halfclose --- skynet-src/socket_server.c | 1 + 1 file changed, 1 insertion(+) diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index 7bd50dfc..6fd975a9 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -1082,6 +1082,7 @@ close_socket(struct socket_server *ss, struct request_close *request, struct soc return SOCKET_CLOSE; } s->type = SOCKET_TYPE_HALFCLOSE; + shutdown(s->fd, SHUT_RD); return -1; } From 1e945a1dec0d97efe55f80fa8170fc48c3cfb0fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=90=E7=86=8F?= Date: Fri, 23 Oct 2020 14:42:31 +0800 Subject: [PATCH 2/2] fix sharetable update and tail call (#1253) Co-authored-by: zixun --- lualib/skynet/sharetable.lua | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lualib/skynet/sharetable.lua b/lualib/skynet/sharetable.lua index e80d3929..8f0666bb 100644 --- a/lualib/skynet/sharetable.lua +++ b/lualib/skynet/sharetable.lua @@ -265,7 +265,7 @@ local function resolve_replace(replace_map) local f = match[tv] if f then record_map[v] = true - f(v) + return f(v) end end @@ -277,7 +277,7 @@ local function resolve_replace(replace_map) nv = getnv(mt) debug.setmetatable(v, nv) else - match_value(mt) + return match_value(mt) end end end @@ -294,7 +294,7 @@ local function resolve_replace(replace_map) for _,v in pairs(internal_types) do match_mt(v) end - match_mt(nil) + return match_mt(nil) end @@ -331,7 +331,7 @@ local function resolve_replace(replace_map) end end end - match_mt(t) + return match_mt(t) end local function match_userdata(u) @@ -341,7 +341,7 @@ local function resolve_replace(replace_map) nv = getnv(uv) setuservalue(u, nv) end - match_mt(u) + return match_mt(u) end local function match_funcinfo(info) @@ -381,7 +381,7 @@ local function resolve_replace(replace_map) local function match_function(f) local info = getinfo(f, "uf") - match_funcinfo(info) + return match_funcinfo(info) end local function match_thread(co, level) @@ -393,13 +393,14 @@ local function resolve_replace(replace_map) match_value(v) end + local uplevel = co == coroutine.running() and 1 or 0 level = level or 1 while true do local info = getinfo(co, level, "uf") if not info then break end - info.level = level + info.level = level + uplevel info.curco = co match_funcinfo(info) level = level + 1 @@ -412,6 +413,7 @@ local function resolve_replace(replace_map) record_map[match] = true record_map[RECORD] = true record_map[record_map] = true + record_map[replace_map] = true record_map[insert_replace] = true record_map[resolve_replace] = true assert(getinfo(co, 3, "f").func == sharetable.update) @@ -449,7 +451,7 @@ function sharetable.update(...) end if next(replace_map) then - resolve_replace(replace_map) + resolve_replace(replace_map) end end