Merge branch 'master' of https://github.com/taosdata/TDengine
This commit is contained in:
commit
90ff348542
|
@ -64,6 +64,7 @@ mpool_h taosMemPoolInit(int numOfBlock, int blockSize) {
|
|||
|
||||
pthread_mutex_init(&(pool_p->mutex), NULL);
|
||||
|
||||
memset(pool_p->pool, 0, (size_t)(blockSize * numOfBlock));
|
||||
for (i = 0; i < pool_p->numOfBlock; ++i) pool_p->freeList[i] = i;
|
||||
|
||||
pool_p->first = 0;
|
||||
|
@ -78,9 +79,7 @@ char *taosMemPoolMalloc(mpool_h handle) {
|
|||
|
||||
pthread_mutex_lock(&(pool_p->mutex));
|
||||
|
||||
if (pool_p->numOfFree <= 0) {
|
||||
pTrace("mempool: out of memory");
|
||||
} else {
|
||||
if (pool_p->numOfFree > 0) {
|
||||
pos = pool_p->pool + pool_p->blockSize * (pool_p->freeList[pool_p->first]);
|
||||
pool_p->first++;
|
||||
pool_p->first = pool_p->first % pool_p->numOfBlock;
|
||||
|
@ -88,7 +87,8 @@ char *taosMemPoolMalloc(mpool_h handle) {
|
|||
}
|
||||
|
||||
pthread_mutex_unlock(&(pool_p->mutex));
|
||||
if (pos != NULL) memset(pos, 0, (size_t)pool_p->blockSize);
|
||||
|
||||
if (pos == NULL) pTrace("mempool: out of memory");
|
||||
return pos;
|
||||
}
|
||||
|
||||
|
@ -98,24 +98,25 @@ void taosMemPoolFree(mpool_h handle, char *pMem) {
|
|||
|
||||
if (pMem == NULL) return;
|
||||
|
||||
pthread_mutex_lock(&pool_p->mutex);
|
||||
|
||||
index = (int)(pMem - pool_p->pool) % pool_p->blockSize;
|
||||
|
||||
if (index != 0) {
|
||||
pError("invalid free address:%p\n", pMem);
|
||||
} else {
|
||||
index = (int)((pMem - pool_p->pool) / pool_p->blockSize);
|
||||
|
||||
if (index < 0 || index >= pool_p->numOfBlock) {
|
||||
pError("mempool: error, invalid address:%p\n", pMem);
|
||||
} else {
|
||||
pool_p->freeList[(pool_p->first + pool_p->numOfFree) % pool_p->numOfBlock] = index;
|
||||
pool_p->numOfFree++;
|
||||
memset(pMem, 0, (size_t)pool_p->blockSize);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
index = (int)((pMem - pool_p->pool) / pool_p->blockSize);
|
||||
if (index < 0 || index >= pool_p->numOfBlock) {
|
||||
pError("mempool: error, invalid address:%p\n", pMem);
|
||||
return;
|
||||
}
|
||||
|
||||
memset(pMem, 0, (size_t)pool_p->blockSize);
|
||||
|
||||
pthread_mutex_lock(&pool_p->mutex);
|
||||
|
||||
pool_p->freeList[(pool_p->first + pool_p->numOfFree) % pool_p->numOfBlock] = index;
|
||||
pool_p->numOfFree++;
|
||||
|
||||
pthread_mutex_unlock(&pool_p->mutex);
|
||||
}
|
||||
|
||||
|
@ -125,6 +126,6 @@ void taosMemPoolCleanUp(mpool_h handle) {
|
|||
pthread_mutex_destroy(&pool_p->mutex);
|
||||
if (pool_p->pool) free(pool_p->pool);
|
||||
if (pool_p->freeList) free(pool_p->freeList);
|
||||
memset(&pool_p, 0, sizeof(pool_p));
|
||||
memset(pool_p, 0, sizeof(*pool_p));
|
||||
free(pool_p);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue