/* * ===================================================================================== * * Filename: msg.cpp * * Description: * * Version: 1.0 * Created: 2021年03月24日 16时48分42秒 * Revision: none * Compiler: gcc * * Author: Li Chao (), * Organization: * * ===================================================================================== */ #include "msg.h" #include "bh_util.h" #include "defs.h" #include "shm_socket.h" namespace bhome_msg { ShmSocket &ShmMsg::Sender() { static auto &mq = GetCenterInfo(shm())->mq_sender_; static ShmSocket sender(mq.offset_, shm(), mq.id_); return sender; } int ShmMsg::Release() { if (!valid()) { return 0; } auto n = meta()->count_.Dec(); if (n == 0) { if (meta()->managed_) { int64_t free_cmd = (id() << 4) | EncodeCmd(eCmdFree); Sender().Send(BHTopicCenterAddress(), free_cmd); } else { Free(); } } else if (n < 0) { LOG_FATAL() << "error double release data."; throw std::runtime_error("double release msg."); } return n; } void ShmMsg::Free() { assert(valid()); shm().Dealloc(meta()); offset_ = 0; assert(!valid()); } } // namespace bhome_msg