From 1e6781bd418a93321953e1c0af5369174a6ee2cb Mon Sep 17 00:00:00 2001 From: t0350 Date: Thu, 29 Apr 2021 14:40:37 +0800 Subject: [PATCH] add coroutine close for skynetco (#1392) Co-authored-by: jietao.cjt --- lualib/skynet/coroutine.lua | 11 ++++++++++- test/testcoroutine.lua | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lualib/skynet/coroutine.lua b/lualib/skynet/coroutine.lua index 54ac499c..6fe92f27 100644 --- a/lualib/skynet/coroutine.lua +++ b/lualib/skynet/coroutine.lua @@ -6,6 +6,7 @@ local coroutine_resume = coroutine.resume local coroutine_yield = coroutine.yield local coroutine_status = coroutine.status local coroutine_running = coroutine.running +local coroutine_close = coroutine.close local select = select local skynetco = {} @@ -15,6 +16,9 @@ skynetco.running = coroutine.running skynetco.status = coroutine.status local skynet_coroutines = setmetatable({}, { __mode = "kv" }) +-- true : skynet coroutine +-- false : skynet suspend +-- nil : exit function skynetco.create(f) local co = coroutine.create(f) @@ -84,7 +88,7 @@ do -- begin skynetco.resume end -- end of skynetco.resume function skynetco.status(co) - local status = coroutine.status(co) + local status = coroutine_status(co) if status == "suspended" then if skynet_coroutines[co] == false then return "blocked" @@ -121,4 +125,9 @@ end end -- end of skynetco.wrap +function skynetco.close(co) + skynet_coroutines[co] = nil + return coroutine_close(co) +end + return skynetco diff --git a/test/testcoroutine.lua b/test/testcoroutine.lua index 910bcc0f..3af017f1 100644 --- a/test/testcoroutine.lua +++ b/test/testcoroutine.lua @@ -50,4 +50,5 @@ skynet.start(function() print("main step", f()) print("main step", f()) -- print("main thread time:", profile.stop()) + print("close", coroutine.close(coroutine.create(main))) end)