From de3f4c85856f31b795f91fe69c20f8ca82d57910 Mon Sep 17 00:00:00 2001 From: actboy168 Date: Wed, 8 May 2024 00:00:45 +0800 Subject: [PATCH] remove channel.reset --- binding/lua_channel.cpp | 23 +++++++++++++---------- test/test_channel.lua | 22 ++++++++++------------ 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/binding/lua_channel.cpp b/binding/lua_channel.cpp index c3cfacd6..20fe332e 100644 --- a/binding/lua_channel.cpp +++ b/binding/lua_channel.cpp @@ -84,12 +84,14 @@ namespace bee::lua_channel { } return r->second; } - void clear() noexcept { + void destroy(zstring_view name) noexcept { std::unique_lock lk(mutex); - for (const auto& [_, c] : channels) { - c->clear(); + std::string namestr { name.data(), name.size() }; + auto it = channels.find(namestr); + if (it != channels.end()) { + it->second->clear(); + channels.erase(it); } - channels.clear(); } channel::box query(zstring_view name) noexcept { std::unique_lock lk(mutex); @@ -147,6 +149,12 @@ namespace bee::lua_channel { return 1; } + static int ldestroy(lua_State* L) { + auto name = lua::checkstrview(L, 1); + g_channel.destroy(name); + return 0; + } + static int lquery(lua_State* L) { auto name = lua::checkstrview(L, 1); channel::box c = g_channel.query(name); @@ -157,11 +165,6 @@ namespace bee::lua_channel { return 1; } - static int lreset(lua_State* L) { - g_channel.clear(); - return 0; - } - static int luaopen(lua_State* L) { if (!net::socket::initialize()) { lua_pushstring(L, error::sys_errmsg("initialize").c_str()); @@ -169,8 +172,8 @@ namespace bee::lua_channel { } luaL_Reg lib[] = { { "create", lcreate }, + { "destroy", ldestroy }, { "query", lquery }, - { "reset", lreset }, { NULL, NULL }, }; luaL_newlibtable(L, lib); diff --git a/test/test_channel.lua b/test/test_channel.lua index 2845bfc5..37c1dd05 100644 --- a/test/test_channel.lua +++ b/test/test_channel.lua @@ -11,27 +11,25 @@ end local test_channel = lt.test "channel" function test_channel:test_create() - channel.reset() lt.assertErrorMsgEquals("Can't query channel 'test'", channel.query, "test") channel.create "test" lt.assertIsUserdata(channel.query "test") lt.assertIsUserdata(channel.query "test") - channel.reset() + channel.destroy "test" channel.create "test" lt.assertErrorMsgEquals("Duplicate channel 'test'", channel.create, "test") - channel.reset() + channel.destroy "test" end function test_channel:test_reset_1() - channel.reset() lt.assertErrorMsgEquals("Can't query channel 'test'", channel.query, "test") channel.create "test" lt.assertIsUserdata(channel.query "test") - channel.reset() + channel.destroy "test" lt.assertErrorMsgEquals("Can't query channel 'test'", channel.query, "test") channel.create "test" lt.assertIsUserdata(channel.query "test") - channel.reset() + channel.destroy "test" end local function TestSuit(f) @@ -48,7 +46,6 @@ local function TestSuit(f) end function test_channel:test_pop_1() - channel.reset() local chan = channel.create "test" local function pack_pop(ok, ...) lt.assertEquals(ok, true) @@ -60,10 +57,10 @@ function test_channel:test_pop_1() end TestSuit(test_ok) -- 基本和serialization的测试重复,所以failed就不测了 + channel.destroy "test" end function test_channel:test_pop_2() - channel.reset() local chan = channel.create "test" local function assertIs(expected) @@ -98,12 +95,10 @@ function test_channel:test_pop_2() assertIs(1025) assertIs(1026) assertEmpty() - - channel.reset() + channel.destroy "test" end function test_channel:test_pop_3() - channel.reset() assertNotThreadError() local req = channel.create "testReq" local res = channel.create "testRes" @@ -146,11 +141,12 @@ function test_channel:test_pop_3() TestSuit(test_ok) req:push "exit" thread.wait(thd) + channel.destroy "testReq" + channel.destroy "testRes" assertNotThreadError() end function test_channel:test_fd() - channel.reset() assertNotThreadError() local req = channel.create "testReq" local res = channel.create "testRes" @@ -213,5 +209,7 @@ function test_channel:test_fd() TestSuit(test_ok) req:push "exit" thread.wait(thd) + channel.destroy "testReq" + channel.destroy "testRes" assertNotThreadError() end