void * AsioHandlerCache::allocate(std::size_t size) { //return malloc(size); VecPtr vecPtr; Lock lock(mHandlerMutex); if (mHandlerFreeList.empty()) { vecPtr.reset( new std::vector<char>(size) ); } else { vecPtr = mHandlerFreeList.back(); mHandlerFreeList.pop_back(); } if (vecPtr->size() != size) { vecPtr->resize(size); } mHandlerUsedList.push_back(vecPtr); return & (*vecPtr)[0]; }
void ObjectPool::put(VecPtr & vecPtr) { RCF_ASSERT(vecPtr); RCF_ASSERT(vecPtr.unique()); vecPtr->resize(0); Lock lock(mVecPtrPoolMutex); mVecPtrPool.push_back(vecPtr); vecPtr.reset(); }