liuxiaolong
2021-07-20 58d904a328c0d849769b483e901a0be9426b8209
src/defs.cpp
@@ -123,6 +123,40 @@
   return shm;
}
ShmSocket &ShmSender(SharedMemory &shm, const bool reset)
{
   typedef std::pair<void *, std::shared_ptr<ShmSocket>> Pair;
   static std::vector<Pair> store;
   static std::mutex s_mtx;
   thread_local Pair local_cache;
   std::lock_guard<std::mutex> lk(s_mtx);
   if (reset) {
      for (auto &kv : store) {
         if (kv.first == &shm) {
            auto &mq = GetCenterInfo(shm)->mq_sender_;
            kv.second.reset(new ShmSocket(mq.offset_, shm, mq.id_));
            local_cache = kv;
            return *local_cache.second;
         }
      }
   } else if (local_cache.first == &shm) {
      return *local_cache.second;
   }
   for (auto &kv : store) {
      if (kv.first == &shm) {
         local_cache = kv;
         return *local_cache.second;
      }
   }
   auto &mq = GetCenterInfo(shm)->mq_sender_;
   store.emplace_back(&shm, std::make_shared<ShmSocket>(mq.offset_, shm, mq.id_));
   // store.emplace_back(&shm, new ShmSocket(mq.offset_, shm, mq.id_));
   local_cache = store.back();
   return *local_cache.second;
}
} // namespace
CenterInfo *GetCenterInfo(SharedMemory &shm)
@@ -134,29 +168,7 @@
   return nullptr;
}
ShmSocket &DefaultSender(SharedMemory &shm)
{
   typedef std::pair<void *, std::shared_ptr<ShmSocket>> Pair;
   static std::vector<Pair> store;
   static std::mutex s_mtx;
   thread_local Pair local_cache;
   if (local_cache.first == &shm) {
      return *local_cache.second;
   }
   std::lock_guard<std::mutex> lk(s_mtx);
   for (auto &kv : store) {
      if (kv.first == &shm) {
         local_cache = kv;
         return *local_cache.second;
      }
   }
   auto &mq = GetCenterInfo(shm)->mq_sender_;
   store.emplace_back(&shm, new ShmSocket(mq.offset_, shm, mq.id_));
   local_cache = store.back();
   return *local_cache.second;
}
ShmSocket &DefaultSender(SharedMemory &shm) { return ShmSender(shm, false); }
BHomeMetaInfo *GetBHomeMeta()
{
@@ -266,13 +278,21 @@
std::string BHomeShmName()
{
   auto bhome_meta = Ptr<BHomeMetaInfo>(kShmMetaInfoFixedAddress + Addr(BHomeMetaShm().get_address()));
   return "bhome_shmq_id_" + std::to_string(bhome_meta->shm_id_.load());
   return "bhshmq_sid_" + std::to_string(bhome_meta->shm_id_.load());
}
SharedMemory &BHomeShm()
{
   static SharedMemory shm(BHomeShmName(), 1024 * 1024 * 512);
   return shm;
   static std::unique_ptr<SharedMemory> shm_ptr;
   static std::string shm_name;
   if (!shm_ptr || shm_name != BHomeShmName()) {
      shm_name = BHomeShmName();
      if (shm_ptr) {
         ShmSender(*shm_ptr, true); // reset sender.
      }
      shm_ptr.reset(new SharedMemory(shm_name, 1024 * 1024 * 512));
   }
   return *shm_ptr;
}
bool GlobalInit(SharedMemory &shm) { return GetCenterInfo(shm); }