wangzhengquan
2021-01-11 73ebfbc4f3fce4f7197b16b74ed4d6abaa9367b5
src/queue/shm_queue.h
@@ -115,7 +115,7 @@
    hashtable_put(hashtable, key, (void *)queue);
  }
  queue->reference++;
  LoggerFactory::getLogger().debug("SHMQueue constructor reference===%d", queue->reference.load());
  // LoggerFactory::getLogger()->debug("SHMQueue constructor reference===%d", queue->reference.load());
}
template <typename ELEM_T> SHMQueue<ELEM_T>::~SHMQueue() {
@@ -124,18 +124,18 @@
    return;
  }
  SemUtil::dec(queue->mutex);
  sem_wait(&(queue->mutex));
  queue->reference--;
  // LoggerFactory::getLogger().debug("SHMQueue destructor  reference===%d",
  // LoggerFactory::getLogger()->debug("SHMQueue destructor  reference===%d",
  if (queue->reference.load() == 0) {
      delete queue;
      queue = NULL;
      hashtable_t *hashtable = mm_get_hashtable();
      hashtable_remove(hashtable, KEY);
      // 此时queue已经销毁,无需 SemUtil::inc(queue->mutex)
      // 此时queue已经销毁,无需  sem_post(&(queue->mutex))
      // printf("SHMQueue destructor delete queue\n");
  } else {
      SemUtil::inc(queue->mutex);
      sem_post(&(queue->mutex));
  }
  
}