From 639d1fb347755d0b1ae027afcdab639374254400 Mon Sep 17 00:00:00 2001 From: fchn289 Date: Mon, 7 Oct 2024 07:13:22 +0800 Subject: [PATCH] MtQ: giveup integrate with dom --- src/thread/MtInQueue.cpp | 24 +------------- src/thread/MtInQueue.hpp | 13 ++------ src/thread/MtInQueueWithDom.hpp | 32 ------------------- ut/thread/MtInQueueTest.cpp | 55 ++------------------------------- 4 files changed, 7 insertions(+), 117 deletions(-) delete mode 100755 src/thread/MtInQueueWithDom.hpp diff --git a/src/thread/MtInQueue.cpp b/src/thread/MtInQueue.cpp index 0f7c76e..55db7c7 100644 --- a/src/thread/MtInQueue.cpp +++ b/src/thread/MtInQueue.cpp @@ -44,13 +44,6 @@ deque::iterator MtInQueue::begin_() return cache_.begin(); } -// *********************************************************************************************** -void MtInQueue::clearHdlrPool() -{ - tid_hdlr_S_.clear(); - setHdlrOK(); -} - // *********************************************************************************************** size_t MtInQueue::handleCacheEle_() { @@ -63,7 +56,7 @@ size_t MtInQueue::handleCacheEle_() auto&& id_hdlr = tid_hdlr_S_.find(ele_tid.second); if (id_hdlr == tid_hdlr_S_.end()) { - defaultHdlr_(ele_tid); + WRN("(MtQ) discard 1 ele(=" << ele_tid.second.name() << ") since no handler."); continue; } id_hdlr->second(ele_tid.first); @@ -129,21 +122,6 @@ ELE_TID MtInQueue::pop() return ele_tid; } -// *********************************************************************************************** -bool MtInQueue::setHdlrOK(const DftHdlr& aHdlr) -{ - if (aHdlr) - { - defaultHdlr_ = aHdlr; - return true; - } - else - { - WRN("(MtQ) why set null hdlr?"); - return false; - } -} - // *********************************************************************************************** MtInQueue& mt_getQ() { diff --git a/src/thread/MtInQueue.hpp b/src/thread/MtInQueue.hpp index d73e8df..79dcf7b 100644 --- a/src/thread/MtInQueue.hpp +++ b/src/thread/MtInQueue.hpp @@ -39,14 +39,12 @@ namespace rlib // - ele & its type_index(==/!= ok, but type_info* & hash_code nok) // - shared_ptr is safe to cast void since type_index (but not safe as SafePtr's create) using ELE_TID = std::pair; -using EleHdlr = std::function; // NO exception allowed -using DftHdlr = std::function; // NO exception allowed +using EleHdlr = std::function; // NO exception allowed // *********************************************************************************************** class MtInQueue { public: - MtInQueue() { setHdlrOK(); } ~MtInQueue(); // aEle may not mt-safe, so here mv @@ -62,13 +60,9 @@ class MtInQueue // shall be called in main thread ONLY!!! template bool setHdlrOK(const EleHdlr&); - bool setHdlrOK(const DftHdlr& aHdlr = [](ELE_TID& aEle_tid) - { - WRN("(MtQ) discard 1 ele(=" << aEle_tid.second.name() << ") since no handler"); - }); size_t handleAllEle(); auto nHdlr() const { return tid_hdlr_S_.size(); } - void clearHdlrPool(); + void clearHdlrPool() { tid_hdlr_S_.clear(); } private: std::deque::iterator begin_(); @@ -80,7 +74,6 @@ class MtInQueue std::mutex mutex_; std::unordered_map tid_hdlr_S_; - DftHdlr defaultHdlr_; // ------------------------------------------------------------------------------------------- #ifdef IN_GTEST @@ -179,5 +172,5 @@ MtInQueue& mt_getQ(); // 2023-10-29 CSZ - integrate handler // 2024-02-15 CSZ 3)use SafePtr (mem-safe); shared_ptr is not mem-safe // 2024-03-10 CSZ - enhance safe of setHdlrOK() -// 2024-10-05 CSZ - integrate with domino +// 2024-10-05 CSZ - integrate with domino (giveup since multi-same-type) // *********************************************************************************************** diff --git a/src/thread/MtInQueueWithDom.hpp b/src/thread/MtInQueueWithDom.hpp deleted file mode 100755 index 0667dca..0000000 --- a/src/thread/MtInQueueWithDom.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright 2024 Nokia - * Licensed under the BSD 3 Clause license - * SPDX-License-Identifier: BSD-3-Clause - */ -// *********************************************************************************************** -// - why: auto move an ele in MtQ to DataDom -// *********************************************************************************************** -#pragma once - -#include "MtInQueue.hpp" - -namespace rlib -{ -const char EN_MTQ[] = "/MtQ/"; - -// *********************************************************************************************** -inline -void defaultHdlr(ELE_TID& aEle_tid) -{ - auto&& dom = DAT_DOM; - const auto en = std::string(EN_MTQ) + aEle_tid.second.name(); - dom->replaceData(en, aEle_tid.first); - dom->forceAllHdlr(en); -} - -} // namespace -// *********************************************************************************************** -// YYYY-MM-DD Who v)Modification Description -// .......... ......... ....................................................................... -// 2024-10-05 CSZ 1)create -// *********************************************************************************************** diff --git a/ut/thread/MtInQueueTest.cpp b/ut/thread/MtInQueueTest.cpp index dac3341..2a9744a 100644 --- a/ut/thread/MtInQueueTest.cpp +++ b/ut/thread/MtInQueueTest.cpp @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */ // *********************************************************************************************** -#include #include #include #include @@ -14,19 +13,12 @@ #include "MT_Semaphore.hpp" #include "UniLog.hpp" -#include "Domino.hpp" -#include "DataDomino.hpp" -#include "HdlrDomino.hpp" -using Dom = rlib::DataDomino>; -#define DAT_DOM (rlib::ObjAnywhere::getObj()) - #define IN_GTEST #include "MT_PingMainTH.hpp" -#include "MtInQueueWithDom.hpp" +#include "MtInQueue.hpp" #undef IN_GTEST using namespace std; -using namespace std::placeholders; using namespace testing; namespace rlib @@ -36,14 +28,11 @@ struct MtInQueueTest : public Test, public UniLog { MtInQueueTest() : UniLog(UnitTest::GetInstance()->current_test_info()->name()) - { - ObjAnywhere::init(); - } + {} ~MtInQueueTest() { mt_getQ().mt_clearElePool(); // not impact other testcase mt_getQ().clearHdlrPool(); // not impact other testcase - ObjAnywhere::deinit(); GTEST_LOG_FAIL } }; @@ -298,10 +287,7 @@ TEST_F(MtInQueueTest, handle_via_base) mt_getQ().handleAllEle(); EXPECT_EQ(0u, mt_getQ().mt_size(true)) << "req: Base & Derive are handled correctly"; } - -#define DEFAULT_HDLR -// *********************************************************************************************** -TEST_F(MtInQueueTest, noHdlrEle_default) +TEST_F(MtInQueueTest, noHdlrEle_discard) { mt_getQ().mt_push(MAKE_PTR(1)); EXPECT_EQ(1u, mt_getQ().mt_size(true)); @@ -309,40 +295,5 @@ TEST_F(MtInQueueTest, noHdlrEle_default) mt_getQ().handleAllEle(); EXPECT_EQ(0u, mt_getQ().mt_size(true)) << "REQ: discard ele w/o hdlr - simple & no leak/crash"; } -TEST_F(MtInQueueTest, noHdlrEle_setInvalidDefaultHdlr) -{ - EXPECT_FALSE(mt_getQ().setHdlrOK(nullptr)); - - mt_getQ().mt_push(MAKE_PTR(1)); - EXPECT_EQ(1u, mt_getQ().mt_size(true)); - mt_getQ().handleAllEle(); - EXPECT_EQ(0u, mt_getQ().mt_size(true)) << "REQ: discard ele w/o hdlr - simple & no leak/crash"; -} -TEST_F(MtInQueueTest, GOLD_noHdlrEle_setDefaultHdlr) -{ - // domino - auto msgSelf = make_safe(); - ObjAnywhere::emplaceObjOK(msgSelf); - ObjAnywhere::emplaceObjOK(make_safe()); - const auto en = string(EN_MTQ) + 'i'; - bool isCalled = false; - DAT_DOM->setHdlr(en, [&isCalled]{ isCalled = true; }); - - // MtQ: - EXPECT_TRUE(mt_getQ().setHdlrOK(bind(&defaultHdlr, _1))); - mt_getQ().mt_push(MAKE_PTR(1)); - mt_getQ().handleAllEle(); - EXPECT_EQ(1, *dynamic_pointer_cast(DAT_DOM->getData(en)).get()) - << "REQ: new MtQ default hdlr works"; - msgSelf->handleAllMsg(); - EXPECT_TRUE(isCalled) << "REQ: domino hdlr called"; - - mt_getQ().clearHdlrPool(); // reset default hdlr - isCalled = false; - mt_getQ().mt_push(MAKE_PTR(1)); - mt_getQ().handleAllEle(); - msgSelf->handleAllMsg(); - EXPECT_FALSE(isCalled) << "REQ: domino hdlr NOT called"; -} } // namespace