From f7f8fbc85c48b003d1e3094a94a3528001977977 Mon Sep 17 00:00:00 2001 From: lichao <lichao@aiotlink.com> Date: 星期二, 01 六月 2021 15:15:55 +0800 Subject: [PATCH] remove length in ShmSocket ctor, not used. --- src/shm.h | 34 ++++++++++------ src/shm_socket.cpp | 7 --- src/shm_socket.h | 8 ++- utest/simple_tests.cpp | 4 +- src/shm_msg_queue.h | 3 - utest/robust_test.cpp | 2 box/node_center.cpp | 4 +- src/shm_msg_queue.cpp | 13 +----- src/defs.cpp | 2 9 files changed, 35 insertions(+), 42 deletions(-) diff --git a/box/node_center.cpp b/box/node_center.cpp index 662b2c0..b285c9f 100644 --- a/box/node_center.cpp +++ b/box/node_center.cpp @@ -164,7 +164,7 @@ // create sockets. try { - ShmSocket tmp(shm, true, ssn, 16); + ShmSocket tmp(shm, ssn, eCreate); node->addrs_.emplace(ssn, tmp.AbsAddr()); return true; } catch (...) { @@ -333,7 +333,7 @@ auto &node = pos->second; try { for (int i = 0; i < msg.extra_mq_num(); ++i) { - ShmSocket tmp(node->shm_, true, head.ssn_id() + i + 1, 16); + ShmSocket tmp(node->shm_, head.ssn_id() + i + 1, eCreate); node->addrs_.emplace(tmp.id(), tmp.AbsAddr()); auto addr = reply.add_extra_mqs(); addr->set_mq_id(tmp.id()); diff --git a/src/defs.cpp b/src/defs.cpp index db0ae61..57df1bc 100644 --- a/src/defs.cpp +++ b/src/defs.cpp @@ -145,7 +145,7 @@ auto InitMQ = [&](auto &mq, auto &&id) { mq.id_ = id; - ShmSocket tmp(shm, id, 16); + ShmSocket tmp(shm, id, eOpenOrCreate); mq.offset_ = tmp.AbsAddr(); }; diff --git a/src/shm.h b/src/shm.h index b5ec2ea..5013893 100644 --- a/src/shm.h +++ b/src/shm.h @@ -162,6 +162,12 @@ template <class D> using SharedPtr = shared_ptr<D, Allocator<void>, Deleter<D>>; +enum Mode { + eOpen = 0, + eCreate = 1, + eOpenOrCreate = 2 +}; + // ShmObject manages an object in shared memory, but ShmObject itself is not in shared memory. template <class T> class ShmObject : private boost::noncopyable @@ -174,24 +180,26 @@ ShmType &shm() const { return shm_; } template <class... Params> - ShmObject(ShmType &segment, const std::string &name, Params &&...t) : + ShmObject(ShmType &segment, const std::string &name, Mode mode, Params &&...t) : shm_(segment), name_(name) { - pdata_ = shm_.FindOrCreate<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); - if (!IsOk()) { - throw("Error: Not enough memory, can not allocate \"" + name_ + "\""); - } - } - template <class... Params> - ShmObject(ShmType &segment, const bool create_or_else_find, const std::string &name, Params &&...t) : - shm_(segment), name_(name) - { - if (create_or_else_find) { - pdata_ = shm_.Create<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); - } else { + switch (mode) { + case eOpen: pdata_ = shm_.Find<Data>(ObjName(name_)); + break; + case eCreate: + pdata_ = shm_.Create<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); + break; + case eOpenOrCreate: + pdata_ = shm_.FindOrCreate<Data>(ObjName(name_), std::forward<decltype(t)>(t)...); + break; + default: break; + } + if (!IsOk()) { + throw("Error: shm can not create/open \"" + name_ + "\""); } } + ShmObject(const int64_t offset, ShmType &segment, const std::string &name) : shm_(segment), name_(name) { diff --git a/src/shm_msg_queue.cpp b/src/shm_msg_queue.cpp index 9db4c6b..056daec 100644 --- a/src/shm_msg_queue.cpp +++ b/src/shm_msg_queue.cpp @@ -31,19 +31,10 @@ } // namespace -ShmMsgQueue::ShmMsgQueue(ShmType &segment, const MQId id, const int len) : +ShmMsgQueue::ShmMsgQueue(ShmType &segment, const MQId id, Mode mode) : id_(id), - queue_(segment, MsgQIdToName(id_), len, segment.get_segment_manager()) + queue_(segment, MsgQIdToName(id_), mode) { -} - -ShmMsgQueue::ShmMsgQueue(ShmType &segment, const bool create_or_else_find, const MQId id, const int len) : - id_(id), - queue_(segment, create_or_else_find, MsgQIdToName(id_), len, segment.get_segment_manager()) -{ - if (!queue_.IsOk()) { - throw("error create/find msgq " + std::to_string(id_)); - } } ShmMsgQueue::ShmMsgQueue(const int64_t abs_addr, ShmType &segment, const MQId id) : id_(id), queue_(abs_addr, segment, MsgQIdToName(id_)) diff --git a/src/shm_msg_queue.h b/src/shm_msg_queue.h index db5414b..e6c104b 100644 --- a/src/shm_msg_queue.h +++ b/src/shm_msg_queue.h @@ -34,8 +34,7 @@ typedef Shmq::ShmType ShmType; typedef uint64_t MQId; - ShmMsgQueue(ShmType &segment, const MQId id, const int len); - ShmMsgQueue(ShmType &segment, const bool create_or_else_find, const MQId id, const int len); + ShmMsgQueue(ShmType &segment, const MQId id, Mode mode); ShmMsgQueue(const int64_t abs_addr, ShmType &segment, const MQId id); ~ShmMsgQueue(); static bool Remove(ShmType &shm, const MQId id); diff --git a/src/shm_socket.cpp b/src/shm_socket.cpp index 2bdccc2..fa10dd3 100644 --- a/src/shm_socket.cpp +++ b/src/shm_socket.cpp @@ -29,13 +29,6 @@ using namespace bhome_msg; using namespace bhome_shm; -ShmSocket::ShmSocket(Shm &shm, const MQId id, const int len) : - run_(false), mq_(shm, id, len), alloc_id_(0), send_buffer_(shm) { Start(); } -ShmSocket::ShmSocket(Shm &shm, const bool create_or_else_find, const MQId id, const int len) : - run_(false), mq_(shm, create_or_else_find, id, len), alloc_id_(0), send_buffer_(shm) { Start(); } -ShmSocket::ShmSocket(int64_t abs_addr, Shm &shm, const MQId id) : - run_(false), mq_(abs_addr, shm, id), alloc_id_(0), send_buffer_(shm) { Start(); } - ShmSocket::~ShmSocket() { Stop(); } bool ShmSocket::Start(int nworker, const RecvCB &onData, const RawRecvCB &onRaw, const IdleCB &onIdle) diff --git a/src/shm_socket.h b/src/shm_socket.h index 9dfdd6b..9bb65fc 100644 --- a/src/shm_socket.h +++ b/src/shm_socket.h @@ -47,9 +47,11 @@ typedef std::function<bool(ShmSocket &sock, MsgI &imsg, BHMsgHead &head)> PartialRecvCB; typedef std::function<void(ShmSocket &sock)> IdleCB; - ShmSocket(Shm &shm, const MQId id, const int len); - ShmSocket(Shm &shm, const bool create_or_else_find, const MQId id, const int len); - ShmSocket(int64_t offset, Shm &shm, const MQId id); + ShmSocket(Shm &shm, const MQId id, Mode mode) : + run_(false), mq_(shm, id, mode), alloc_id_(0), send_buffer_(shm) { Start(); } + ShmSocket(int64_t abs_addr, Shm &shm, const MQId id) : + run_(false), mq_(abs_addr, shm, id), alloc_id_(0), send_buffer_(shm) { Start(); } + ~ShmSocket(); static bool Remove(SharedMemory &shm, const MQId id) { return Queue::Remove(shm, id); } bool Remove() { return Remove(shm(), id()); } diff --git a/utest/robust_test.cpp b/utest/robust_test.cpp index a744a61..b15e2e8 100644 --- a/utest/robust_test.cpp +++ b/utest/robust_test.cpp @@ -75,7 +75,7 @@ int64_t d; BOOST_CHECK(tmp.pop(d)); - ShmObject<Rcb> rcb(shm, "test_rcb"); + ShmObject<Rcb> rcb(shm, "test_rcb", eOpenOrCreate); bool try_more = true; auto Writer = [&]() { diff --git a/utest/simple_tests.cpp b/utest/simple_tests.cpp index 6d3c7a2..87933ac 100644 --- a/utest/simple_tests.cpp +++ b/utest/simple_tests.cpp @@ -50,12 +50,12 @@ typedef ShmObject<s1000> Int; std::string name = std::to_string(id); auto a0 = Avail(); - Int i1(shm, name); + Int i1(shm, name, eOpenOrCreate); auto a1 = Avail(); BOOST_CHECK_LT(a1, a0); printf("s1000 size: %ld\n", a0 - a1); i1->a[0] = 5; - Int i2(shm, name); + Int i2(shm, name, eOpenOrCreate); auto a2 = Avail(); BOOST_CHECK_EQUAL(a1, a2); BOOST_CHECK_EQUAL(i1.data(), i2.data()); -- Gitblit v1.8.0