From cab831748a2a9cc18b7f18f3b5e14a4374b7ab68 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期一, 17 五月 2021 18:34:26 +0800 Subject: [PATCH] socket send using abs addr, avoid shm find by id. --- src/bh_api.cpp | 31 +++++++++++++++++++++---------- 1 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/bh_api.cpp b/src/bh_api.cpp index c9ceb20..ca7249d 100644 --- a/src/bh_api.cpp +++ b/src/bh_api.cpp @@ -30,16 +30,21 @@ } std::unique_ptr<TopicNode> &ProcNodePtr() { - static bool init = GlobalInit(BHomeShm()); - auto InitLog = []() { - auto id = GetProcExe(); - char path[200] = {0}; - sprintf(path, "/tmp/bhshmq_node_%s.log", id.c_str()); - ns_log::AddLog(path); - return true; - }; - static bool init_log = InitLog(); - static std::unique_ptr<TopicNode> ptr(new TopicNode(BHomeShm())); + static std::mutex mtx; + std::lock_guard<std::mutex> lk(mtx); + + static std::unique_ptr<TopicNode> ptr; + if (!ptr && GlobalInit(BHomeShm())) { + auto InitLog = []() { + auto id = GetProcExe(); + char path[200] = {0}; + sprintf(path, "/tmp/bhshmq_node_%s.log", id.c_str()); + ns_log::AddLog(path); + return true; + }; + static bool init_log = InitLog(); + ptr.reset(new TopicNode(BHomeShm())); + } return ptr; } TopicNode &ProcNode() @@ -114,6 +119,12 @@ return false; } MsgOut msg_reply; + auto &ptr = ProcNodePtr(); + if (!ptr) { + SetLastError(eNotFound, "center not started."); + return 0; + } + return (ProcNode().*mfunc)(input, msg_reply, timeout_ms) && PackOutput(msg_reply, reply, reply_len); } -- Gitblit v1.8.0