Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ad92904a
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
ad92904a
编写于
8月 11, 2022
作者:
G
Ganlin Zhao
提交者:
GitHub
8月 11, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16010 from taosdata/fix/TD-18331
fix(query): fix memleak in doTimeslice operator
上级
74cd6a97
73f57290
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
34 addition
and
4 deletion
+34
-4
source/libs/executor/src/timewindowoperator.c
source/libs/executor/src/timewindowoperator.c
+34
-4
未找到文件。
source/libs/executor/src/timewindowoperator.c
浏览文件 @
ad92904a
...
...
@@ -2215,6 +2215,7 @@ static void genInterpolationResult(STimeSliceOperatorInfo* pSliceInfo, SExprSupp
colDataAppend
(
pDst
,
rows
,
(
char
*
)
current
.
val
,
false
);
}
taosMemoryFree
(
current
.
val
);
pResBlock
->
info
.
rows
+=
1
;
break
;
}
...
...
@@ -2437,10 +2438,10 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
// if its the last point in data block, no need to fill, but reserve this point as the start value and do
// the interpolation when processing next data block.
if
(
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
if
(
nextTs
>
pSliceInfo
->
current
)
{
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
...
...
@@ -2478,11 +2479,11 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
doKeepPrevRows
(
pSliceInfo
,
pBlock
,
i
);
if
(
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
// no need to increate pSliceInfo->current here
//pSliceInfo->current =
// taosTimeAdd(pSliceInfo->current, pInterval->interval, pInterval->intervalUnit, pInterval->precision);
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
if
(
nextTs
>
pSliceInfo
->
current
)
{
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
...
...
@@ -2558,10 +2559,10 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
if
(
pSliceInfo
->
fillType
==
TSDB_FILL_LINEAR
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
pSliceInfo
->
current
=
taosTimeAdd
(
pSliceInfo
->
current
,
pInterval
->
interval
,
pInterval
->
intervalUnit
,
pInterval
->
precision
);
if
(
i
<
pBlock
->
info
.
rows
-
1
)
{
doKeepLinearInfo
(
pSliceInfo
,
pBlock
,
i
,
false
);
int64_t
nextTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
+
1
);
if
(
nextTs
>
pSliceInfo
->
current
)
{
while
(
pSliceInfo
->
current
<
nextTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
win
.
ekey
)
{
...
...
@@ -2618,6 +2619,35 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
return
pResBlock
->
info
.
rows
==
0
?
NULL
:
pResBlock
;
}
void
destroyTimeSliceOperatorInfo
(
void
*
param
,
int32_t
numOfOutput
)
{
STimeSliceOperatorInfo
*
pInfo
=
(
STimeSliceOperatorInfo
*
)
param
;
pInfo
->
pRes
=
blockDataDestroy
(
pInfo
->
pRes
);
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pInfo
->
pPrevRow
);
++
i
)
{
SGroupKeys
*
pKey
=
taosArrayGet
(
pInfo
->
pPrevRow
,
i
);
taosMemoryFree
(
pKey
->
pData
);
}
taosArrayDestroy
(
pInfo
->
pPrevRow
);
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pInfo
->
pNextRow
);
++
i
)
{
SGroupKeys
*
pKey
=
taosArrayGet
(
pInfo
->
pNextRow
,
i
);
taosMemoryFree
(
pKey
->
pData
);
}
taosArrayDestroy
(
pInfo
->
pNextRow
);
for
(
int32_t
i
=
0
;
i
<
taosArrayGetSize
(
pInfo
->
pLinearInfo
);
++
i
)
{
SFillLinearInfo
*
pKey
=
taosArrayGet
(
pInfo
->
pLinearInfo
,
i
);
taosMemoryFree
(
pKey
->
start
.
val
);
taosMemoryFree
(
pKey
->
end
.
val
);
}
taosArrayDestroy
(
pInfo
->
pLinearInfo
);
taosMemoryFree
(
pInfo
->
pFillColInfo
);
taosMemoryFreeClear
(
param
);
}
SOperatorInfo
*
createTimeSliceOperatorInfo
(
SOperatorInfo
*
downstream
,
SPhysiNode
*
pPhyNode
,
SExecTaskInfo
*
pTaskInfo
)
{
STimeSliceOperatorInfo
*
pInfo
=
taosMemoryCalloc
(
1
,
sizeof
(
STimeSliceOperatorInfo
));
SOperatorInfo
*
pOperator
=
taosMemoryCalloc
(
1
,
sizeof
(
SOperatorInfo
));
...
...
@@ -2665,7 +2695,7 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
pOperator
->
pTaskInfo
=
pTaskInfo
;
pOperator
->
fpSet
=
createOperatorFpSet
(
operatorDummyOpenFn
,
doTimeslice
,
NULL
,
NULL
,
destroy
Basic
OperatorInfo
,
NULL
,
NULL
,
NULL
);
createOperatorFpSet
(
operatorDummyOpenFn
,
doTimeslice
,
NULL
,
NULL
,
destroy
TimeSlice
OperatorInfo
,
NULL
,
NULL
,
NULL
);
blockDataEnsureCapacity
(
pInfo
->
pRes
,
pOperator
->
resultInfo
.
capacity
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录