Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
66bcf1fa
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看板
提交
66bcf1fa
编写于
9月 14, 2022
作者:
M
Minglei Jin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: deep copy ovfl cells to avoid double free
上级
2f5b1a00
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
13 addition
and
6 deletion
+13
-6
source/libs/tdb/src/db/tdbBtree.c
source/libs/tdb/src/db/tdbBtree.c
+3
-3
source/libs/tdb/src/db/tdbPage.c
source/libs/tdb/src/db/tdbPage.c
+9
-2
source/libs/tdb/src/inc/tdbInt.h
source/libs/tdb/src/inc/tdbInt.h
+1
-1
未找到文件。
source/libs/tdb/src/db/tdbBtree.c
浏览文件 @
66bcf1fa
...
...
@@ -489,7 +489,7 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild, TXN
}
// Copy the root page content to the child page
tdbPageCopy
(
pRoot
,
pChild
);
tdbPageCopy
(
pRoot
,
pChild
,
0
);
// Reinitialize the root page
zArg
.
flags
=
TDB_BTREE_ROOT
;
...
...
@@ -742,7 +742,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx
for
(
int
i
=
0
;
i
<
nOlds
;
i
++
)
{
tdbPageCreate
(
pOlds
[
0
]
->
pageSize
,
&
pOldsCopy
[
i
],
tdbDefaultMalloc
,
NULL
);
tdbBtreeInitPage
(
pOldsCopy
[
i
],
&
iarg
,
0
);
tdbPageCopy
(
pOlds
[
i
],
pOldsCopy
[
i
]);
tdbPageCopy
(
pOlds
[
i
],
pOldsCopy
[
i
]
,
0
);
}
iNew
=
0
;
nNewCells
=
0
;
...
...
@@ -840,7 +840,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx
i8
flags
=
TDB_BTREE_ROOT
|
TDB_BTREE_PAGE_IS_LEAF
(
pNews
[
0
]);
// copy content to the parent page
tdbBtreeInitPage
(
pParent
,
&
(
SBtreeInitPageArg
){.
flags
=
flags
,
.
pBt
=
pBt
},
0
);
tdbPageCopy
(
pNews
[
0
],
pParent
);
tdbPageCopy
(
pNews
[
0
],
pParent
,
1
);
}
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
...
...
source/libs/tdb/src/db/tdbPage.c
浏览文件 @
66bcf1fa
...
...
@@ -229,7 +229,7 @@ int tdbPageDropCell(SPage *pPage, int idx, TXN *pTxn, SBTree *pBt) {
return
0
;
}
void
tdbPageCopy
(
SPage
*
pFromPage
,
SPage
*
pToPage
)
{
void
tdbPageCopy
(
SPage
*
pFromPage
,
SPage
*
pToPage
,
int
deepCopyOvfl
)
{
int
delta
,
nFree
;
pToPage
->
pFreeStart
=
pToPage
->
pPageHdr
+
(
pFromPage
->
pFreeStart
-
pFromPage
->
pPageHdr
);
...
...
@@ -250,8 +250,15 @@ void tdbPageCopy(SPage *pFromPage, SPage *pToPage) {
// Copy the overflow cells
for
(
int
iOvfl
=
0
;
iOvfl
<
pFromPage
->
nOverflow
;
iOvfl
++
)
{
SCell
*
pNewCell
=
pFromPage
->
apOvfl
[
iOvfl
];
if
(
deepCopyOvfl
)
{
int
szCell
=
(
*
pFromPage
->
xCellSize
)(
pFromPage
,
pFromPage
->
apOvfl
[
iOvfl
],
0
,
NULL
,
NULL
);
pNewCell
=
(
SCell
*
)
tdbOsMalloc
(
szCell
);
memcpy
(
pNewCell
,
pFromPage
->
apOvfl
[
iOvfl
],
szCell
);
}
pToPage
->
apOvfl
[
iOvfl
]
=
pNewCell
;
pToPage
->
aiOvfl
[
iOvfl
]
=
pFromPage
->
aiOvfl
[
iOvfl
];
pToPage
->
apOvfl
[
iOvfl
]
=
pFromPage
->
apOvfl
[
iOvfl
];
}
pToPage
->
nOverflow
=
pFromPage
->
nOverflow
;
}
...
...
source/libs/tdb/src/inc/tdbInt.h
浏览文件 @
66bcf1fa
...
...
@@ -333,7 +333,7 @@ void tdbPageInit(SPage *pPage, u8 szAmHdr, int (*xCellSize)(const SPage *, SCell
int
tdbPageInsertCell
(
SPage
*
pPage
,
int
idx
,
SCell
*
pCell
,
int
szCell
,
u8
asOvfl
);
int
tdbPageDropCell
(
SPage
*
pPage
,
int
idx
,
TXN
*
pTxn
,
SBTree
*
pBt
);
int
tdbPageUpdateCell
(
SPage
*
pPage
,
int
idx
,
SCell
*
pCell
,
int
szCell
,
TXN
*
pTxn
,
SBTree
*
pBt
);
void
tdbPageCopy
(
SPage
*
pFromPage
,
SPage
*
pToPage
);
void
tdbPageCopy
(
SPage
*
pFromPage
,
SPage
*
pToPage
,
int
copyOvflCells
);
int
tdbPageCapacity
(
int
pageSize
,
int
amHdrSize
);
static
inline
SCell
*
tdbPageGetCell
(
SPage
*
pPage
,
int
idx
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录