| | |
| | | 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()) { |
| | |
| | | if (n == 0) { |
| | | if (meta()->managed_) { |
| | | int64_t free_cmd = (id() << 4) | EncodeCmd(eCmdFree); |
| | | Sender().Send(BHTopicCenterAddress(), free_cmd); |
| | | DefaultSender(shm()).Send(BHTopicCenterAddress(shm()), free_cmd); |
| | | } else { |
| | | Free(); |
| | | } |
| | | } else if (n < 0) { |
| | | LOG_FATAL() << "error double release data."; |
| | | // ns_log::GetTrace(); |
| | | LOG_FATAL() << "double release msg."; |
| | | throw std::runtime_error("double release msg."); |
| | | } |
| | | return n; |