From 921417f41dff1c3ac754babaa69d3b855c94af41 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期五, 26 三月 2021 11:57:49 +0800
Subject: [PATCH] remove utest program
---
src/shm_queue.cpp | 28 +++++++++++-----------------
1 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/src/shm_queue.cpp b/src/shm_queue.cpp
index 1446446..5e67d1f 100644
--- a/src/shm_queue.cpp
+++ b/src/shm_queue.cpp
@@ -48,29 +48,22 @@
bool ShmMsgQueue::Send(const MQId &remote_id, const Msg &msg, const int timeout_ms)
{
Queue *remote = find(MsgQIdToName(remote_id));
-
- return remote && remote->Write(msg, timeout_ms);
-
- if(!remote) {
- return false;
- }
- msg.AddRef();
- if (remote->Write(msg, timeout_ms)) {
- return true;
- } else {
- msg.RemoveRef();
- return false;
- }
+ return remote && remote->Write(msg, timeout_ms, [&](){msg.AddRef();});
}
bool ShmMsgQueue::Send(const MQId &remote_id, const void *data, const size_t size, const int timeout_ms)
{
+ // Test shows that in the 2 cases:
+ // 1) build msg first, then find remote queue;
+ // 2) find remote queue first, then build msg;
+ // 1 is about 50% faster than 2, maybe cache related.
+
Msg msg;
- if (msg.Build(shm(), Id(), data, size, false)) {
- if (Send(remote_id, msg, timeout_ms)) {
+ if(msg.Build(shm(), Id(), data, size, false)) {
+ if(Send(remote_id, msg, timeout_ms)) {
return true;
} else {
- msg.FreeFrom(shm());
+ msg.Release(shm());
}
}
return false;
@@ -80,9 +73,10 @@
{
Msg msg;
if (Read(msg, timeout_ms)) {
+ DEFER1(msg.Release(shm()););
+
auto ptr = msg.get<char>();
if (ptr) {
- DEFER1(shm().Dealloc(ptr););
MsgMetaV1 meta;
meta.Parse(ptr);
source_id = meta.src_id_;
--
Gitblit v1.8.0