From d17450bd7bc9fd5e98e8e2f00999caffe2e301a6 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期五, 26 三月 2021 17:43:09 +0800 Subject: [PATCH] test thread/fork speed; reset msg after release. --- src/msg.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 43 insertions(+), 0 deletions(-) diff --git a/src/msg.cpp b/src/msg.cpp index e8c6d26..9883246 100644 --- a/src/msg.cpp +++ b/src/msg.cpp @@ -32,4 +32,47 @@ *static_cast<MsgMetaV1*>(p) = *this; } +bool Msg::Build(SharedMemory &shm, const MQId &src_id, const void *data, const size_t size, const bool refcount) +{ + if (!data || !size) { + return false; + } + void *p = shm.Alloc(sizeof(MsgMetaV1) + size); + if (!p) { + return false; + } + RefCount *rc = 0; + if (refcount) { + rc = shm.New<RefCount>(); + if (!rc) { + shm.Dealloc(p); + return false; + } + } + MsgMetaV1 meta; + meta.data_size_ = size; + meta.src_id_ = src_id; + meta.Pack(p); + memcpy(static_cast<char *>(p) + sizeof(meta), data, size); + Msg(p, rc).swap(*this); + return true; + +} + +int Msg::Release(SharedMemory &shm) +{ + if (IsCounted()) { + const int n = count_->Dec(); + if (n != 0) { + return n; + } + } + // free data + shm.Dealloc(ptr_); + ptr_ = 0; + shm.Delete(count_); + count_ = 0; + return 0; +} + } // namespace bhome_shm -- Gitblit v1.8.0