Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7461e2d2
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
7461e2d2
编写于
2月 24, 2023
作者:
X
Xiaoyu Wang
提交者:
GitHub
2月 24, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20125 from taosdata/fix/TD-22658
fix(tdb/coder): free key memory of stack btc's coder
上级
cc393f39
0833592f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
19 addition
and
16 deletion
+19
-16
source/libs/tdb/src/db/tdbBtree.c
source/libs/tdb/src/db/tdbBtree.c
+17
-16
source/libs/tdb/src/inc/tdbInt.h
source/libs/tdb/src/inc/tdbInt.h
+2
-0
未找到文件。
source/libs/tdb/src/db/tdbBtree.c
浏览文件 @
7461e2d2
...
...
@@ -253,7 +253,7 @@ int tdbBtreeDelete(SBTree *pBt, const void *pKey, int kLen, TXN *pTxn) {
}
int
tdbBtreeUpsert
(
SBTree
*
pBt
,
const
void
*
pKey
,
int
nKey
,
const
void
*
pData
,
int
nData
,
TXN
*
pTxn
)
{
SBTC
btc
;
SBTC
btc
=
{
0
}
;
int
c
;
int
ret
;
...
...
@@ -264,11 +264,18 @@ int tdbBtreeUpsert(SBTree *pBt, const void *pKey, int nKey, const void *pData, i
// move the cursor
ret
=
tdbBtcMoveTo
(
&
btc
,
pKey
,
nKey
,
&
c
);
if
(
ret
<
0
)
{
ASSERT
(
0
);
tdbError
(
"tdb/btree-upsert: btc move to failed with ret: %d."
,
ret
);
if
(
TDB_CELLDECODER_FREE_KEY
(
&
btc
.
coder
))
{
tdbFree
(
btc
.
coder
.
pKey
);
}
tdbBtcClose
(
&
btc
);
return
-
1
;
}
if
(
TDB_CELLDECODER_FREE_KEY
(
&
btc
.
coder
))
{
tdbFree
(
btc
.
coder
.
pKey
);
}
if
(
btc
.
idx
==
-
1
)
{
btc
.
idx
=
0
;
c
=
1
;
...
...
@@ -280,8 +287,8 @@ int tdbBtreeUpsert(SBTree *pBt, const void *pKey, int nKey, const void *pData, i
ret
=
tdbBtcUpsert
(
&
btc
,
pKey
,
nKey
,
pData
,
nData
,
c
);
if
(
ret
<
0
)
{
ASSERT
(
0
);
tdbBtcClose
(
&
btc
);
tdbError
(
"tdb/btree-upsert: btc upsert failed with ret: %d."
,
ret
);
return
-
1
;
}
...
...
@@ -1428,15 +1435,19 @@ static int tdbBtreeDecodeCell(SPage *pPage, const SCell *pCell, SCellDecoder *pD
// Clear the state of decoder
if
(
TDB_CELLDECODER_FREE_VAL
(
pDecoder
))
{
tdbFree
(
pDecoder
->
pVal
);
TDB_CELLDECODER_CLZ_FREE_VAL
(
pDecoder
);
// tdbTrace("tdb btc decoder val set nil: %p/0x%x ", pDecoder, pDecoder->freeKV);
}
if
(
TDB_CELLDECODER_FREE_KEY
(
pDecoder
))
{
tdbFree
(
pDecoder
->
pKey
);
TDB_CELLDECODER_CLZ_FREE_KEY
(
pDecoder
);
// tdbTrace("tdb btc decoder key set nil: %p/0x%x ", pDecoder, pDecoder->freeKV);
}
pDecoder
->
kLen
=
-
1
;
pDecoder
->
pKey
=
NULL
;
pDecoder
->
vLen
=
-
1
;
pDecoder
->
pVal
=
NULL
;
pDecoder
->
pgno
=
0
;
TDB_CELLDECODER_SET_FREE_NIL
(
pDecoder
);
// tdbTrace("tdb btc decoder set nil: %p/0x%x ", pDecoder, pDecoder->freeKV);
// 1. Decode header part
if
(
!
leaf
)
{
...
...
@@ -2188,10 +2199,6 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
}
else
{
lidx
=
lidx
+
1
;
}
if
(
TDB_CELLDECODER_FREE_KEY
(
&
pBtc
->
coder
))
{
tdbFree
((
void
*
)
pTKey
);
}
// compare last cell
if
(
lidx
<=
ridx
)
{
pBtc
->
idx
=
ridx
;
...
...
@@ -2202,9 +2209,6 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
}
else
{
ridx
=
ridx
-
1
;
}
if
(
TDB_CELLDECODER_FREE_KEY
(
&
pBtc
->
coder
))
{
tdbFree
((
void
*
)
pTKey
);
}
}
// binary search
...
...
@@ -2215,9 +2219,6 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
pBtc
->
idx
=
(
lidx
+
ridx
)
>>
1
;
tdbBtcGet
(
pBtc
,
&
pTKey
,
&
tkLen
,
NULL
,
NULL
);
c
=
pBt
->
kcmpr
(
pKey
,
kLen
,
pTKey
,
tkLen
);
if
(
TDB_CELLDECODER_FREE_KEY
(
&
pBtc
->
coder
))
{
tdbFree
((
void
*
)
pTKey
);
}
if
(
c
<
0
)
{
// pKey < cd.pKey
ridx
=
pBtc
->
idx
-
1
;
...
...
source/libs/tdb/src/inc/tdbInt.h
浏览文件 @
7461e2d2
...
...
@@ -122,6 +122,8 @@ typedef struct SBtInfo {
#define TDB_CELLD_F_VAL 0x2
#define TDB_CELLDECODER_SET_FREE_NIL(pCellDecoder) ((pCellDecoder)->freeKV = TDB_CELLD_F_NIL)
#define TDB_CELLDECODER_CLZ_FREE_KEY(pCellDecoder) ((pCellDecoder)->freeKV &= ~TDB_CELLD_F_KEY)
#define TDB_CELLDECODER_CLZ_FREE_VAL(pCellDecoder) ((pCellDecoder)->freeKV &= ~TDB_CELLD_F_VAL)
#define TDB_CELLDECODER_SET_FREE_KEY(pCellDecoder) ((pCellDecoder)->freeKV |= TDB_CELLD_F_KEY)
#define TDB_CELLDECODER_SET_FREE_VAL(pCellDecoder) ((pCellDecoder)->freeKV |= TDB_CELLD_F_VAL)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录