diff --git a/src/client/src/tscSecondaryMerge.c b/src/client/src/tscSecondaryMerge.c index d87ee4b81bfe8091ac3a41d23906083a03589684..e84d19086f5e0033a6a5b31e26e9b650904dae62 100644 --- a/src/client/src/tscSecondaryMerge.c +++ b/src/client/src/tscSecondaryMerge.c @@ -614,6 +614,7 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr pSchema = (SSchema *)calloc(1, sizeof(SSchema) * pQueryInfo->exprsInfo.numOfExprs); if (pSchema == NULL) { + tfree(*pMemBuffer); tscError("%p failed to allocate memory", pSql); pRes->code = TSDB_CODE_CLI_OUT_OF_MEMORY; return pRes->code; @@ -635,15 +636,27 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr } pModel = createColumnModel(pSchema, pQueryInfo->exprsInfo.numOfExprs, capacity); + if (pModel == NULL) { + goto _error_memory; + } for (int32_t i = 0; i < pMeterMetaInfo->pMetricMeta->numOfVnodes; ++i) { (*pMemBuffer)[i] = createExtMemBuffer(nBufferSizes, rlen, pModel); + + if ((*pMemBuffer)[i] == NULL) { + for (int32_t j=0; j < i; ++j ) { + destroyExtMemBuffer((*pMemBuffer)[j]); + } + goto _error_memory; + } (*pMemBuffer)[i]->flushModel = MULTIPLE_APPEND_MODEL; } if (createOrderDescriptor(pOrderDesc, pCmd, pModel) != TSDB_CODE_SUCCESS) { - pRes->code = TSDB_CODE_CLI_OUT_OF_MEMORY; - return pRes->code; + for (int32_t i = 0; i < pMeterMetaInfo->pMetricMeta->numOfVnodes; ++i) { + destroyExtMemBuffer((*pMemBuffer)[i]); + } + goto _error_memory; } // final result depends on the fields number @@ -686,6 +699,13 @@ int32_t tscLocalReducerEnvCreate(SSqlObj *pSql, tExtMemBuffer ***pMemBuffer, tOr tfree(pSchema); return TSDB_CODE_SUCCESS; + +_error_memory: + tfree(pSchema); + tfree(*pMemBuffer); + tscError("%p failed to allocate memory", pSql); + pRes->code = TSDB_CODE_CLI_OUT_OF_MEMORY; + return pRes->code; } /** @@ -699,7 +719,7 @@ void tscLocalReducerEnvDestroy(tExtMemBuffer **pMemBuffer, tOrderDescriptor *pDe destroyColumnModel(pFinalModel); tOrderDescDestroy(pDesc); for (int32_t i = 0; i < numOfVnodes; ++i) { - pMemBuffer[i] = destoryExtMemBuffer(pMemBuffer[i]); + pMemBuffer[i] = destroyExtMemBuffer(pMemBuffer[i]); } tfree(pMemBuffer); diff --git a/src/inc/textbuffer.h b/src/inc/textbuffer.h index b46b98ed382e207d77abdff8a8bd2f41408f5fd5..ec7a192fad4bbeea43e93c539ca02e30f531eca8 100644 --- a/src/inc/textbuffer.h +++ b/src/inc/textbuffer.h @@ -136,7 +136,7 @@ tExtMemBuffer *createExtMemBuffer(int32_t inMemSize, int32_t elemSize, SColumnMo * @param pMemBuffer * @return */ -void *destoryExtMemBuffer(tExtMemBuffer *pMemBuffer); +void *destroyExtMemBuffer(tExtMemBuffer *pMemBuffer); /** * @param pMemBuffer diff --git a/src/util/src/textbuffer.c b/src/util/src/textbuffer.c index 1d1ddf698cf528b826b0ecc49d61f6a6d1e231fe..11f526cec32976865b79503bd82fc205176661bf 100644 --- a/src/util/src/textbuffer.c +++ b/src/util/src/textbuffer.c @@ -80,7 +80,7 @@ tExtMemBuffer* createExtMemBuffer(int32_t inMemSize, int32_t elemSize, SColumnMo return pMemBuffer; } -void* destoryExtMemBuffer(tExtMemBuffer *pMemBuffer) { +void* destroyExtMemBuffer(tExtMemBuffer *pMemBuffer) { if (pMemBuffer == NULL) { return NULL; } diff --git a/src/util/src/tpercentile.c b/src/util/src/tpercentile.c index b3c09033b4d48f5d00d2ad3deafea6d29e1be3ec..e013a2a33a1c4c62731e48ce01e299b5652b6fd6 100644 --- a/src/util/src/tpercentile.c +++ b/src/util/src/tpercentile.c @@ -32,7 +32,7 @@ tExtMemBuffer *releaseBucketsExceptFor(tMemBucket *pMemBucket, int16_t segIdx, i pBuffer = pSeg->pBuffer[j]; } else { if (pSeg->pBuffer && pSeg->pBuffer[j]) { - pSeg->pBuffer[j] = destoryExtMemBuffer(pSeg->pBuffer[j]); + pSeg->pBuffer[j] = destroyExtMemBuffer(pSeg->pBuffer[j]); } } } @@ -338,7 +338,7 @@ void tMemBucketDestroy(tMemBucket *pBucket) { for (int32_t j = 0; j < pSeg->numOfSlots; ++j) { if (pSeg->pBuffer[j] != NULL) { - pSeg->pBuffer[j] = destoryExtMemBuffer(pSeg->pBuffer[j]); + pSeg->pBuffer[j] = destroyExtMemBuffer(pSeg->pBuffer[j]); } } tfree(pSeg->pBuffer); @@ -588,7 +588,7 @@ void releaseBucket(tMemBucket *pMemBucket, int32_t segIdx, int32_t slotIdx) { return; } - pSeg->pBuffer[slotIdx] = destoryExtMemBuffer(pSeg->pBuffer[slotIdx]); + pSeg->pBuffer[slotIdx] = destroyExtMemBuffer(pSeg->pBuffer[slotIdx]); } //////////////////////////////////////////////////////////////////////////////////////////// @@ -853,7 +853,7 @@ double getPercentileImpl(tMemBucket *pMemBucket, int32_t count, double fraction) tMemBucketSegment *pSeg = &pMemBucket->pSegs[tt]; for (int32_t ttx = 0; ttx < pSeg->numOfSlots; ++ttx) { if (pSeg->pBuffer && pSeg->pBuffer[ttx]) { - pSeg->pBuffer[ttx] = destoryExtMemBuffer(pSeg->pBuffer[ttx]); + pSeg->pBuffer[ttx] = destroyExtMemBuffer(pSeg->pBuffer[ttx]); } } }