diff --git a/src/client/src/tscSecondaryMerge.c b/src/client/src/tscSecondaryMerge.c index 846116ecaab13d76ad9e2cf90e1b96f73549f211..f56f3969d922349fe1c2a65094e3d197e40604d3 100644 --- a/src/client/src/tscSecondaryMerge.c +++ b/src/client/src/tscSecondaryMerge.c @@ -440,8 +440,7 @@ void tscDestroyLocalReducer(SSqlObj *pSql) { tscTrace("%p waiting for delete procedure, status: %d", pSql, status); } - tfree(pLocalReducer->interpolationInfo.prevValues); - tfree(pLocalReducer->interpolationInfo.pTags); + taosDestoryInterpoInfo(&pLocalReducer->interpolationInfo); if (pLocalReducer->pCtx != NULL) { for(int32_t i = 0; i < pCmd->fieldsInfo.numOfOutputCols; ++i) { diff --git a/src/inc/tinterpolation.h b/src/inc/tinterpolation.h index 40b8c5cb2f85ad6cc403bce4159bcab12f3c1476..22b4ceb4f06799e826c2711c7317b1ebd3197e9d 100644 --- a/src/inc/tinterpolation.h +++ b/src/inc/tinterpolation.h @@ -38,13 +38,13 @@ typedef struct SPoint { void * val; } SPoint; -typedef void (*__interpo_callback_fn_t)(void *param); - int64_t taosGetIntervalStartTimestamp(int64_t startTime, int64_t timeRange, char intervalTimeUnit, int16_t precision); void taosInitInterpoInfo(SInterpolationInfo *pInterpoInfo, int32_t order, int64_t startTimeStamp, int32_t numOfTags, int32_t rowSize); +void taosDestoryInterpoInfo(SInterpolationInfo *pInterpoInfo); + void taosInterpoSetStartInfo(SInterpolationInfo *pInterpoInfo, int32_t numOfRawDataInRows, int32_t type); TSKEY taosGetRevisedEndKey(TSKEY ekey, int32_t order, int32_t timeInterval, int8_t intervalTimeUnit, int8_t precision); @@ -78,8 +78,8 @@ int32_t taosNumOfRemainPoints(SInterpolationInfo *pInterpoInfo); */ int32_t taosDoInterpoResult(SInterpolationInfo *pInterpoInfo, int16_t interpoType, tFilePage **data, int32_t numOfRawDataInRows, int32_t outputRows, int64_t nInterval, - int64_t *pPrimaryKeyArray, tColModel *pModel, char **srcData, int64_t *defaultVal, - int32_t *functionIDs, int32_t bufSize); + const int64_t *pPrimaryKeyArray, tColModel *pModel, char **srcData, int64_t *defaultVal, + const int32_t *functionIDs, int32_t bufSize); int taosDoLinearInterpolation(int32_t type, SPoint *point1, SPoint *point2, SPoint *point); diff --git a/src/system/detail/src/vnodeQueryImpl.c b/src/system/detail/src/vnodeQueryImpl.c index 8f2d94a1cf835c88b1afa9b8bc6457b93271cea4..3673e5751d8283c764cdda71a3a799d9b9206dc8 100644 --- a/src/system/detail/src/vnodeQueryImpl.c +++ b/src/system/detail/src/vnodeQueryImpl.c @@ -2260,7 +2260,9 @@ static void teardownQueryRuntimeEnv(SQueryRuntimeEnv *pRuntimeEnv) { pRuntimeEnv->vnodeFileInfo.numOfFiles = 0; free(pRuntimeEnv->vnodeFileInfo.pFileInfo); } - + + taosDestoryInterpoInfo(&pRuntimeEnv->interpoInfo); + if (pRuntimeEnv->pInterpoBuf != NULL) { for (int32_t i = 0; i < pRuntimeEnv->pQuery->numOfOutputCols; ++i) { tfree(pRuntimeEnv->pInterpoBuf[i]); @@ -7085,7 +7087,6 @@ bool vnodeHasRemainResults(void *handle) { SQuery * pQuery = pRuntimeEnv->pQuery; SInterpolationInfo *pInterpoInfo = &pRuntimeEnv->interpoInfo; - if (pQuery->limit.limit > 0 && pQInfo->pointsRead >= pQuery->limit.limit) { return false; } diff --git a/src/util/src/tinterpolation.c b/src/util/src/tinterpolation.c index ee0c7aa0097d4ae3994b6264eedd6de94b38699f..b17d17260792f9bd7bb511214524dfccb2f721ad 100644 --- a/src/util/src/tinterpolation.c +++ b/src/util/src/tinterpolation.c @@ -77,6 +77,18 @@ void taosInitInterpoInfo(SInterpolationInfo* pInterpoInfo, int32_t order, int64_ tfree(pInterpoInfo->prevValues); } +// the SInterpolationInfo itself will not be released +void taosDestoryInterpoInfo(SInterpolationInfo *pInterpoInfo) { + if (pInterpoInfo == NULL) { + return; + } + + tfree(pInterpoInfo->prevValues); + tfree(pInterpoInfo->nextValues); + + tfree(pInterpoInfo->pTags); +} + void taosInterpoSetStartInfo(SInterpolationInfo* pInterpoInfo, int32_t numOfRawDataInRows, int32_t type) { if (type == TSDB_INTERPO_NONE) { return; @@ -283,8 +295,8 @@ static void doInterpoResultImpl(SInterpolationInfo* pInterpoInfo, int16_t interp int32_t taosDoInterpoResult(SInterpolationInfo* pInterpoInfo, int16_t interpoType, tFilePage** data, int32_t numOfRawDataInRows, int32_t outputRows, int64_t nInterval, - int64_t* pPrimaryKeyArray, tColModel* pModel, char** srcData, int64_t* defaultVal, - int32_t* functionIDs, int32_t bufSize) { + const int64_t* pPrimaryKeyArray, tColModel* pModel, char** srcData, int64_t* defaultVal, + const int32_t* functionIDs, int32_t bufSize) { int32_t num = 0; pInterpoInfo->numOfCurrentInterpo = 0;