Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Mr、小李
TDengine
提交
119549c4
T
TDengine
项目概览
Mr、小李
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
119549c4
编写于
4月 18, 2020
作者:
H
hjxilinx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-98] fix memory leak
上级
912d3baa
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
34 deletion
+17
-34
src/query/src/queryExecutor.c
src/query/src/queryExecutor.c
+17
-34
未找到文件。
src/query/src/queryExecutor.c
浏览文件 @
119549c4
...
...
@@ -3208,7 +3208,7 @@ static void doDisableFunctsForSupplementaryScan(SQuery *pQuery, SWindowResInfo *
}
}
void
disableFunc
tForTableSuppl
eScan
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
order
)
{
void
disableFunc
InRevers
eScan
(
SQueryRuntimeEnv
*
pRuntimeEnv
,
int32_t
order
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
// group by normal columns and interval query on normal table
...
...
@@ -3416,7 +3416,7 @@ static void queryStatusRestore(SQueryRuntimeEnv *pRuntimeEnv, SQueryStatus *pSta
tsBufSetCursor
(
pRuntimeEnv
->
pTSBuf
,
&
pStatus
->
cur
);
}
static
void
do
SingleMeterSupplement
Scan
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
static
void
do
Reverse
Scan
(
SQueryRuntimeEnv
*
pRuntimeEnv
)
{
SQuery
*
pQuery
=
pRuntimeEnv
->
pQuery
;
SQueryStatus
qStatus
=
{
0
};
...
...
@@ -3424,11 +3424,11 @@ static void doSingleMeterSupplementScan(SQueryRuntimeEnv *pRuntimeEnv) {
return
;
}
dTrace
(
"QInfo:%p start to
supp scan"
,
GET_QINFO_ADDR
(
pQuery
));
dTrace
(
"QInfo:%p start to
reverse scan"
,
GET_QINFO_ADDR
(
pRuntimeEnv
));
SET_SUPPLEMENT_SCAN_FLAG
(
pRuntimeEnv
);
// close necessary function execution during supplementary scan
disableFunc
tForTableSuppl
eScan
(
pRuntimeEnv
,
pQuery
->
order
.
order
);
disableFunc
InRevers
eScan
(
pRuntimeEnv
,
pQuery
->
order
.
order
);
queryStatusSave
(
pRuntimeEnv
,
&
qStatus
);
// STimeWindow w = {.skey = pQuery->window.skey, .ekey = pQuery->window.ekey};
...
...
@@ -3557,7 +3557,7 @@ void scanAllDataBlocks(SQueryRuntimeEnv *pRuntimeEnv) {
pQuery
->
window
.
ekey
=
pQuery
->
lastKey
-
step
;
// /*tsdbpos_t current =*/ tsdbDataBlockTell(pRuntimeEnv->pQueryHandle);
do
SingleMeterSupplement
Scan
(
pRuntimeEnv
);
do
Reverse
Scan
(
pRuntimeEnv
);
// update the pQuery->window.skey and pQuery->window.ekey to limit the scan scope of sliding query during reverse scan
pQuery
->
lastKey
=
lkey
;
...
...
@@ -5866,13 +5866,6 @@ static void freeQInfo(SQInfo *pQInfo) {
sem_destroy
(
&
(
pQInfo
->
dataReady
));
teardownQueryRuntimeEnv
(
&
pQInfo
->
runtimeEnv
);
// if (pQInfo->pTableDataInfo != NULL) {
// size_t num = taosHashGetSize(pQInfo->groupInfo);
// for (int32_t j = 0; j < 0; ++j) {
// destroyMeterQueryInfo(pQInfo->pTableDataInfo[j].pTableQInfo, pQuery->numOfOutputCols);
// }
// }
for
(
int32_t
i
=
0
;
i
<
pQuery
->
numOfFilterCols
;
++
i
)
{
SSingleColumnFilterInfo
*
pColFilter
=
&
pQuery
->
pFilterInfo
[
i
];
if
(
pColFilter
->
numOfFilters
>
0
)
{
...
...
@@ -5904,8 +5897,13 @@ static void freeQInfo(SQInfo *pQInfo) {
tfree
(
pQuery
->
pGroupbyExpr
);
tfree
(
pQuery
);
taosArrayDestroy
(
pQInfo
->
groupInfo
.
pGroupList
);
int32_t
numOfGroups
=
taosArrayGetSize
(
pQInfo
->
groupInfo
.
pGroupList
);
for
(
int32_t
i
=
0
;
i
<
numOfGroups
;
++
i
)
{
SArray
*
p
=
taosArrayGetP
(
pQInfo
->
groupInfo
.
pGroupList
,
i
);
taosArrayDestroy
(
p
);
}
taosArrayDestroy
(
pQInfo
->
groupInfo
.
pGroupList
);
dTrace
(
"QInfo:%p QInfo is freed"
,
pQInfo
);
// destroy signature, in order to avoid the query process pass the object safety check
...
...
@@ -6007,7 +6005,7 @@ int32_t qCreateQueryInfo(void* tsdb, SQueryTableMsg *pQueryMsg, qinfo_t *pQInfo)
}
bool
isSTableQuery
=
false
;
STableGroupInfo
*
groupInfo
=
calloc
(
1
,
sizeof
(
STableGroupInfo
))
;
STableGroupInfo
groupInfo
=
{
0
}
;
if
((
pQueryMsg
->
queryType
&
TSDB_QUERY_TYPE_STABLE_QUERY
)
!=
0
)
{
isSTableQuery
=
true
;
...
...
@@ -6015,8 +6013,8 @@ int32_t qCreateQueryInfo(void* tsdb, SQueryTableMsg *pQueryMsg, qinfo_t *pQInfo)
STableId
*
id
=
taosArrayGet
(
pTableIdList
,
0
);
id
->
uid
=
-
1
;
//todo fix me
/*int32_t ret =*/
tsdbQueryByTagsCond
(
tsdb
,
id
->
uid
,
tagCond
,
pQueryMsg
->
tagCondLen
,
groupInfo
,
pGroupColIndex
,
pQueryMsg
->
numOfGroupCols
);
if
(
groupInfo
->
numOfTables
==
0
)
{
// no qualified tables no need to do query
/*int32_t ret =*/
tsdbQueryByTagsCond
(
tsdb
,
id
->
uid
,
tagCond
,
pQueryMsg
->
tagCondLen
,
&
groupInfo
,
pGroupColIndex
,
pQueryMsg
->
numOfGroupCols
);
if
(
groupInfo
.
numOfTables
==
0
)
{
// no qualified tables no need to do query
code
=
TSDB_CODE_SUCCESS
;
goto
_query_over
;
}
...
...
@@ -6024,12 +6022,12 @@ int32_t qCreateQueryInfo(void* tsdb, SQueryTableMsg *pQueryMsg, qinfo_t *pQInfo)
assert
(
taosArrayGetSize
(
pTableIdList
)
==
1
);
STableId
*
id
=
taosArrayGet
(
pTableIdList
,
0
);
if
((
code
=
tsdbGetOneTableGroup
(
tsdb
,
id
->
uid
,
groupInfo
))
!=
TSDB_CODE_SUCCESS
)
{
if
((
code
=
tsdbGetOneTableGroup
(
tsdb
,
id
->
uid
,
&
groupInfo
))
!=
TSDB_CODE_SUCCESS
)
{
goto
_query_over
;
}
}
(
*
pQInfo
)
=
createQInfoImpl
(
pQueryMsg
,
pGroupbyExpr
,
pExprs
,
groupInfo
);
(
*
pQInfo
)
=
createQInfoImpl
(
pQueryMsg
,
pGroupbyExpr
,
pExprs
,
&
groupInfo
);
if
((
*
pQInfo
)
==
NULL
)
{
code
=
TSDB_CODE_SERV_OUT_OF_MEMORY
;
}
...
...
@@ -6037,24 +6035,9 @@ int32_t qCreateQueryInfo(void* tsdb, SQueryTableMsg *pQueryMsg, qinfo_t *pQInfo)
code
=
initQInfo
(
pQueryMsg
,
tsdb
,
*
pQInfo
,
isSTableQuery
);
_query_over:
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosArrayDestroy
(
pTableIdList
);
}
taosArrayDestroy
(
pTableIdList
);
// if failed to add ref for all meters in this query, abort current query
// if (code != TSDB_CODE_SUCCESS) {
// vnodeDecQueryRefCount(pQueryMsg, pMeterObjList, incNumber);
// }
//
// tfree(pQueryMsg->pSqlFuncExprs);
// tfree(pMeterObjList);
// ret = vnodeSendQueryRspMsg(pObj, code, pObj->qhandle);
//
// tfree(pQueryMsg->pSidExtInfo);
// for(int32_t i = 0; i < pQueryMsg->numOfCols; ++i) {
// vnodeFreeColumnInfo(&pQueryMsg->colList[i]);
// }
//
// atomic_fetch_add_32(&vnodeSelectReqNum, 1);
return
TSDB_CODE_SUCCESS
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录