lichao
2021-06-03 69f60d8bcc5121eb952b57277c94ad5cecb8d44a
src/defs.cpp
@@ -123,29 +123,28 @@
   return shm;
}
} // namespace
CenterInfo *GetCenterInfo(SharedMemory &shm)
{
   auto pmeta = Ptr<CenterMetaInfo>(kCenterInfoFixedAddress + Addr(shm.get_address()));
   if (pmeta->tag_ == kMetaInfoTag) {
      return &pmeta->info_;
   }
   return nullptr;
}
ShmSocket &DefaultSender(SharedMemory &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;
   if (local_cache.first == &shm) {
   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;
   }
   std::lock_guard<std::mutex> lk(s_mtx);
   for (auto &kv : store) {
      if (kv.first == &shm) {
         local_cache = kv;
@@ -157,6 +156,18 @@
   local_cache = store.back();
   return *local_cache.second;
}
} // namespace
CenterInfo *GetCenterInfo(SharedMemory &shm)
{
   auto pmeta = Ptr<CenterMetaInfo>(kCenterInfoFixedAddress + Addr(shm.get_address()));
   if (pmeta->tag_ == kMetaInfoTag) {
      return &pmeta->info_;
   }
   return nullptr;
}
ShmSocket &DefaultSender(SharedMemory &shm) { return ShmSender(shm, false); }
BHomeMetaInfo *GetBHomeMeta()
{
@@ -271,8 +282,16 @@
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); }