#include "shm_mm_wrapper.h" #include "mem_pool.h" #include "hashtable.h" #include "lock_free_queue.h" #include "shm_socket.h" #define BUFFER_TIME 10 void shm_mm_wrapper_init(int size) { mem_pool_init(size); } void shm_mm_wrapper_destroy() { mem_pool_destroy(); } int shm_mm_wrapper_alloc_key() { return mm_alloc_key(); } //删除包含在keys内的queue int shm_mm_wrapper_remove_keys(int keys[], int length) { hashtable_t *hashtable = mm_get_hashtable(); LockFreeQueue *mqueue; int count = 0; for(int i = 0; i< length; i++) { // 销毁共享内存的queue mqueue = (LockFreeQueue *)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++; } } return count; } // 删除不在keys内的queue int shm_mm_wrapper_remove_keys_exclude(int keys[], int length) { hashtable_t *hashtable = mm_get_hashtable(); std::set *keyset = hashtable_keyset(hashtable); std::set::iterator keyItr; LockFreeQueue *mqueue; bool found; int count = 0; for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) { found = false; for (size_t i = 0; i < length; i++) { if (*keyItr == keys[i]) { found = true; break; } } // 100内的是bus内部自己用的 if (!found && *keyItr > 100) { // 销毁共享内存的queue mqueue = (LockFreeQueue *)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++; } } } delete keyset; return count; }