/* * ===================================================================================== * * 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 { 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); DefaultSender(shm()).Send(BHTopicCenterAddress(shm()), free_cmd); } else { Free(); } } else if (n < 0) { // ns_log::GetTrace(); LOG_FATAL() << "double release msg."; throw std::runtime_error("double release msg."); } return n; } void ShmMsg::Free() { assert(valid()); shm().Dealloc(meta()); offset_ = 0; assert(!valid()); } } // namespace bhome_msg