From 1ff714838c03cba1a18884d5b48a20ee6c4275ac Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期五, 21 五月 2021 15:00:53 +0800
Subject: [PATCH] class MsgI, ShmMsgQueue, no bind to shm.

---
 src/shm_socket.cpp |   18 +++++++++---------
 1 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/shm_socket.cpp b/src/shm_socket.cpp
index f177b87..11824d7 100644
--- a/src/shm_socket.cpp
+++ b/src/shm_socket.cpp
@@ -30,18 +30,18 @@
 using namespace bhome_shm;
 
 ShmSocket::ShmSocket(Shm &shm, const MQId id, const int len) :
-    run_(false), mq_(shm, id, len), alloc_id_(0) { Start(); }
+    run_(false), mq_(shm, id, len), alloc_id_(0), send_buffer_(shm) { Start(); }
 ShmSocket::ShmSocket(Shm &shm, const bool create_or_else_find, const MQId id, const int len) :
-    run_(false), mq_(shm, create_or_else_find, id, len), alloc_id_(0) { Start(); }
+    run_(false), mq_(shm, create_or_else_find, id, len), alloc_id_(0), send_buffer_(shm) { Start(); }
 ShmSocket::ShmSocket(int64_t abs_addr, Shm &shm, const MQId id) :
-    run_(false), mq_(abs_addr, shm, id), alloc_id_(0) { Start(); }
+    run_(false), mq_(abs_addr, shm, id), alloc_id_(0), send_buffer_(shm) { Start(); }
 
 ShmSocket::~ShmSocket() { Stop(); }
 
 bool ShmSocket::Start(int nworker, const RecvCB &onData, const RawRecvCB &onRaw, const IdleCB &onIdle)
 {
 	auto ioProc = [this, onData, onRaw, onIdle]() {
-		auto DoSend = [this]() { return send_buffer_.TrySend(mq()); };
+		auto DoSend = [this]() { return send_buffer_.TrySend(); };
 		auto DoRecv = [=] {
 			// do not recv if no cb is set.
 			if (!onData && per_msg_cbs_->empty() && !onRaw && alloc_cbs_->empty()) { return false; }
@@ -73,7 +73,7 @@
 				if (IsCmd(val)) {
 					onCmdCB(*this, val);
 				} else {
-					MsgI imsg(val);
+					MsgI imsg(val, shm());
 					DEFER1(imsg.Release());
 					BHMsgHead head;
 					if (imsg.ParseHead(head)) {
@@ -113,7 +113,7 @@
 		while (run_) { ioProc(); }
 		// try send pending msgs.
 		auto end_time = steady_clock::now() + 3s;
-		while (send_buffer_.TrySend(mq()) && steady_clock::now() < end_time) {
+		while (send_buffer_.TrySend() && steady_clock::now() < end_time) {
 			// LOG_DEBUG() << "try send pending msgs.";
 		}
 	};
@@ -170,7 +170,7 @@
 	};
 #if 0
 	// self alloc
-	MsgI msg;
+	MsgI msg(shm());
 	if (msg.Make(size)) {
 		DEFER1(msg.Release());
 		return OnResult(msg);
@@ -194,7 +194,7 @@
 	              (id << 4) |
 	              EncodeCmd(eCmdAllocRequest0);
 	auto rawCB = [onResult](ShmSocket &sock, int64_t &val) {
-		MsgI msg((val >> 32) & MaskBits(31));
+		MsgI msg(((val >> 32) & MaskBits(31)), sock.shm());
 		DEFER1(msg.Release());
 		onResult(msg);
 		return true;
@@ -206,5 +206,5 @@
 		alloc_cbs_->Pick(id, cb_no_use);
 	};
 
-	return Send(BHTopicCenterAddress(), cmd, onExpireRemoveCB);
+	return Send(BHTopicCenterAddress(shm()), cmd, onExpireRemoveCB);
 }
\ No newline at end of file

--
Gitblit v1.8.0