From c6964d5af25d4ec7ed9dbe7674dc4e3896b36ead Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期五, 16 四月 2021 16:10:02 +0800 Subject: [PATCH] node remove mq if never registered; refactor. --- src/sendq.h | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/sendq.h b/src/sendq.h index 92e566b..b4f3821 100644 --- a/src/sendq.h +++ b/src/sendq.h @@ -23,6 +23,7 @@ #include "timed_queue.h" #include <deque> #include <functional> +#include <list> #include <mutex> #include <string> #include <unordered_map> @@ -67,23 +68,35 @@ msg.AddRef(); TimedMsg tmp(expire, MsgInfo{msg, onExpire}); - std::unique_lock<std::mutex> lock(mutex_); - in_[addr].emplace_back(std::move(tmp)); + std::unique_lock<std::mutex> lock(mutex_in_); + auto &al = in_[addr]; + if (!al.empty()) { + al.front().emplace_back(std::move(tmp)); + } else { + al.insert(al.begin(), Array())->emplace_back(std::move(tmp)); + } } - typedef std::deque<TimedMsg> MsgList; - typedef std::unordered_map<Remote, MsgList> Store; + typedef std::deque<TimedMsg> Array; + typedef std::list<Array> ArrayList; + typedef std::unordered_map<Remote, ArrayList> Store; + + int DoSend1Remote(bhome_shm::ShmMsgQueue &mq, const Remote &remote, Array &arr); + int DoSend1Remote(bhome_shm::ShmMsgQueue &mq, const Remote &remote, ArrayList &arr); + class MsgIter { - MsgList::iterator iter_; + Array::iterator iter_; public: - MsgIter(MsgList::iterator iter) : + MsgIter(Array::iterator iter) : iter_(iter) {} MsgIter &operator++() { return ++iter_, *this; } bool operator==(const MsgIter &a) { return iter_ == a.iter_; } MsgI &operator*() { return iter_->data().msg_; } }; - std::mutex mutex_; + + std::mutex mutex_in_; + std::mutex mutex_out_; Store in_; Store out_; }; -- Gitblit v1.8.0