wangzhengquan
2021-02-20 b5ae34d4422399c5d5458d071cca8c9bc89d20bb
src/shm/shm_mm_wrapper.cpp
@@ -1,10 +1,10 @@
#include "shm_mm_wrapper.h"
#include "mem_pool.h"
#include "shm_mm.h"
#include "hashtable.h"
#include "lock_free_queue.h"
#include "shm_socket.h"
#define BUFFER_TIME 10
#define BUFFER_TIME 1
void shm_mm_wrapper_init(int size) {
@@ -30,21 +30,24 @@
  LockFreeQueue<shm_packet_t> *mqueue;
  while(true) {
    for(auto it = shmQueueStMap->begin(); it != shmQueueStMap->end(); ++it ) {
      if(it->second.status = SHM_QUEUE_ST_CLOSED && difftime(time(NULL), it->second.closeTime) > 2 ) {
        mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, keys[i]);
        if(mqueue != NULL) {
          delete mqueue;
          hashtable_remove(hashtable, it->first);
          printf("reove queue %d\n", it->first);
          // 不能 erase ,否则会出现多进程之间的同步问题, 而这正是这里要解决的问题
          // it = shmQueueStMap->erase(it);
          // continue;
        }
      if(it->second.status == SHM_QUEUE_ST_CLOSED && difftime(time(NULL), it->second.closeTime) > BUFFER_TIME ) {
        // mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, keys[i]);
        // if(mqueue != NULL) {
        //   delete mqueue;
        // }
        hashtable_remove(hashtable, it->first);
        printf("reomved queue %d\n\n", it->first);
        it->second.status = SHM_QUEUE_ST_RECYCLED;
        // 不能 erase ,否则会出现多进程之间的同步问题, 而这正是这里要解决的问题
        // it = shmQueueStMap->erase(it);
        // continue;
      }
    }
    sleep(1);
  }
  return 0;
}
//删除包含在keys内的queue
@@ -54,16 +57,9 @@
  int count = 0;
  for(int i = 0; i< length; i++) {
    // 销毁共享内存的queue
    mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, keys[i]);
    if(mqueue == NULL) {
       continue;
    }
    if(difftime(time(NULL), mqueue->getCreateTime()) > BUFFER_TIME ) {
      delete mqueue;
      hashtable_remove(hashtable, keys[i]);
      LoggerFactory::getLogger()->debug("remove queue %d",  keys[i]);
      count++;
    }
    hashtable_remove(hashtable, keys[i]);
    LoggerFactory::getLogger()->debug("remove queue %d",  keys[i]);
    count++;
    
  }
  return count;
@@ -89,13 +85,9 @@
    // 100内的是bus内部自己用的
    if (!found && *keyItr > 100) {
      // 销毁共享内存的queue
      mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, *keyItr);
      if(difftime(time(NULL), mqueue->getCreateTime()) > BUFFER_TIME ) {
        delete mqueue;
        hashtable_remove(hashtable, *keyItr);
        LoggerFactory::getLogger()->debug("remove queue %d",  *keyItr);
        count++;
      }
      hashtable_remove(hashtable, *keyItr);
      LoggerFactory::getLogger()->debug("remove queue %d",  *keyItr);
      count++;
     
    }
  }