提交 5ddc7b45 编写于 作者: H hjxilinx

fix memory leaks and refactor some codes

上级 2c393a89
...@@ -201,10 +201,10 @@ typedef struct SDataBlockList { ...@@ -201,10 +201,10 @@ typedef struct SDataBlockList {
} SDataBlockList; } SDataBlockList;
typedef struct SQueryInfo { typedef struct SQueryInfo {
int16_t command; // the command may be different for each subclause, so keep it seperately. int16_t command; // the command may be different for each subclause, so keep it seperately.
uint16_t type; // query/insert/import type uint16_t type; // query/insert/import type
char intervalTimeUnit; char intervalTimeUnit;
int64_t etime, stime; int64_t etime, stime;
int64_t nAggTimeInterval; // aggregation time interval int64_t nAggTimeInterval; // aggregation time interval
int64_t nSlidingTime; // sliding window in mseconds int64_t nSlidingTime; // sliding window in mseconds
...@@ -221,9 +221,9 @@ typedef struct SQueryInfo { ...@@ -221,9 +221,9 @@ typedef struct SQueryInfo {
int16_t numOfTables; int16_t numOfTables;
SMeterMetaInfo **pMeterInfo; SMeterMetaInfo **pMeterInfo;
struct STSBuf * tsBuf; struct STSBuf * tsBuf;
int64_t * defaultVal; // default value for interpolation int64_t * defaultVal; // default value for interpolation
char * msg; // pointer to the pCmd->payload to keep error message temporarily char * msg; // pointer to the pCmd->payload to keep error message temporarily
int64_t clauseLimit; // limit for this sub clause int64_t clauseLimit; // limit for this sub clause
} SQueryInfo; } SQueryInfo;
// data source from sql string or from file // data source from sql string or from file
...@@ -248,13 +248,13 @@ typedef struct { ...@@ -248,13 +248,13 @@ typedef struct {
int32_t numOfTablesInSubmit; int32_t numOfTablesInSubmit;
}; };
int32_t clauseIndex; // index of multiple subclause query int32_t clauseIndex; // index of multiple subclause query
int8_t isParseFinish; int8_t isParseFinish;
short numOfCols; short numOfCols;
uint32_t allocSize;
uint32_t allocSize; char * payload;
char * payload; int payloadLen;
int payloadLen;
SQueryInfo **pQueryInfo; SQueryInfo **pQueryInfo;
int32_t numOfClause; int32_t numOfClause;
...@@ -413,6 +413,7 @@ int32_t tscCreateResPointerInfo(SQueryInfo *pQueryInfo, SSqlRes *pRes); ...@@ -413,6 +413,7 @@ int32_t tscCreateResPointerInfo(SQueryInfo *pQueryInfo, SSqlRes *pRes);
void tscDestroyResPointerInfo(SSqlRes *pRes); void tscDestroyResPointerInfo(SSqlRes *pRes);
void tscFreeSqlCmdData(SSqlCmd *pCmd); void tscFreeSqlCmdData(SSqlCmd *pCmd);
void tscFreeResData(SSqlObj* pSql);
/** /**
* only free part of resources allocated during query. * only free part of resources allocated during query.
...@@ -435,7 +436,7 @@ void tscProcessMultiVnodesInsertFromFile(SSqlObj *pSql); ...@@ -435,7 +436,7 @@ void tscProcessMultiVnodesInsertFromFile(SSqlObj *pSql);
void tscKillMetricQuery(SSqlObj *pSql); void tscKillMetricQuery(SSqlObj *pSql);
void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen); void tscInitResObjForLocalQuery(SSqlObj *pObj, int32_t numOfRes, int32_t rowLen);
bool tscIsUpdateQuery(STscObj *pObj); bool tscIsUpdateQuery(STscObj *pObj);
bool tscHasReachLimitation(SQueryInfo* pQueryInfo, SSqlRes* pRes); bool tscHasReachLimitation(SQueryInfo *pQueryInfo, SSqlRes *pRes);
char *tscGetErrorMsgPayload(SSqlCmd *pCmd); char *tscGetErrorMsgPayload(SSqlCmd *pCmd);
......
...@@ -453,8 +453,12 @@ void tscDestroyLocalReducer(SSqlObj *pSql) { ...@@ -453,8 +453,12 @@ void tscDestroyLocalReducer(SSqlObj *pSql) {
for(int32_t i = 0; i < pQueryInfo->fieldsInfo.numOfOutputCols; ++i) { for(int32_t i = 0; i < pQueryInfo->fieldsInfo.numOfOutputCols; ++i) {
SQLFunctionCtx *pCtx = &pLocalReducer->pCtx[i]; SQLFunctionCtx *pCtx = &pLocalReducer->pCtx[i];
tVariantDestroy(&pCtx->tag); tVariantDestroy(&pCtx->tag);
if (pCtx->tagInfo.pTagCtxList != NULL) {
tfree(pCtx->tagInfo.pTagCtxList);
}
} }
tfree(pLocalReducer->pCtx); tfree(pLocalReducer->pCtx);
} }
......
...@@ -365,6 +365,39 @@ void tscFreeSqlCmdData(SSqlCmd* pCmd) { ...@@ -365,6 +365,39 @@ void tscFreeSqlCmdData(SSqlCmd* pCmd) {
tscFreeSubqueryInfo(pCmd); tscFreeSubqueryInfo(pCmd);
} }
void tscFreeResData(SSqlObj* pSql) {
SSqlRes* pRes = &pSql->res;
tfree(pRes->pRsp);
pRes->row = 0;
pRes->rspType = 0;
pRes->rspLen = 0;
pRes->row = 0;
pRes->numOfRows = 0;
pRes->numOfTotal = 0;
pRes->numOfTotalInCurrentClause = 0;
pRes->numOfGroups = 0;
pRes->precision = 0;
pRes->numOfnchar = 0;
pRes->qhandle = 0;
pRes->offset = 0;
pRes->useconds = 0;
pRes->code = 0;
pRes->data = NULL;
tfree(pRes->pGroupRec);
tscDestroyLocalReducer(pSql);
tscDestroyResPointerInfo(pRes);
tfree(pRes->pColumnIndex);
}
void tscFreeSqlObjPartial(SSqlObj* pSql) { void tscFreeSqlObjPartial(SSqlObj* pSql) {
if (pSql == NULL || pSql->signature != pSql) { if (pSql == NULL || pSql->signature != pSql) {
return; return;
...@@ -387,22 +420,11 @@ void tscFreeSqlObjPartial(SSqlObj* pSql) { ...@@ -387,22 +420,11 @@ void tscFreeSqlObjPartial(SSqlObj* pSql) {
pthread_mutex_lock(&pObj->mutex); pthread_mutex_lock(&pObj->mutex);
tfree(pSql->sqlstr); tfree(pSql->sqlstr);
pthread_mutex_unlock(&pObj->mutex); pthread_mutex_unlock(&pObj->mutex);
tfree(pRes->pRsp); tscFreeResData(pSql);
pRes->row = 0;
pRes->numOfRows = 0;
pRes->numOfTotal = 0;
pRes->numOfTotalInCurrentClause = 0;
pRes->numOfGroups = 0;
tfree(pRes->pGroupRec);
tscDestroyLocalReducer(pSql);
tfree(pSql->pSubs); tfree(pSql->pSubs);
pSql->numOfSubs = 0; pSql->numOfSubs = 0;
tscDestroyResPointerInfo(pRes);
tfree(pRes->pColumnIndex);
tscFreeSqlCmdData(pCmd); tscFreeSqlCmdData(pCmd);
} }
...@@ -2156,13 +2178,15 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) { ...@@ -2156,13 +2178,15 @@ void tscTryQueryNextClause(SSqlObj* pSql, void (*queryFp)()) {
pSql->cmd.command = pQueryInfo->command; pSql->cmd.command = pQueryInfo->command;
pRes->numOfTotal += pRes->numOfTotalInCurrentClause; //backup the total number of result first
pRes->numOfTotalInCurrentClause = 0; int64_t num = pRes->numOfTotal + pRes->numOfTotalInCurrentClause;
pRes->rspType = 0; tscFreeResData(pSql);
pSql->numOfSubs = 0; pRes->numOfTotal = num;
tfree(pSql->pSubs); tfree(pSql->pSubs);
pSql->numOfSubs = 0;
if (pSql->fp != NULL) { if (pSql->fp != NULL) {
pSql->fp = queryFp; pSql->fp = queryFp;
assert(queryFp != NULL); assert(queryFp != NULL);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册