Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
5c6de973
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看板
未验证
提交
5c6de973
编写于
7月 27, 2022
作者:
M
Minglei Jin
提交者:
GitHub
7月 27, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #15474 from taosdata/fix/TD-17825
fix: free ovfl cells when destroying page
上级
8d598655
1584dd0a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
12 addition
and
7 deletion
+12
-7
source/libs/tdb/src/db/tdbPage.c
source/libs/tdb/src/db/tdbPage.c
+12
-7
未找到文件。
source/libs/tdb/src/db/tdbPage.c
浏览文件 @
5c6de973
...
...
@@ -76,14 +76,17 @@ int tdbPageDestroy(SPage *pPage, void (*xFree)(void *arg, void *ptr), void *arg)
ASSERT
(
xFree
);
for
(
int
iOvfl
=
0
;
iOvfl
<
pPage
->
nOverflow
;
iOvfl
++
)
{
tdbOsFree
(
pPage
->
apOvfl
[
iOvfl
]);
}
ptr
=
pPage
->
pData
;
xFree
(
arg
,
ptr
);
return
0
;
}
void
tdbPageZero
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
))
{
void
tdbPageZero
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
))
{
pPage
->
pPageHdr
=
pPage
->
pData
+
szAmHdr
;
TDB_PAGE_NCELLS_SET
(
pPage
,
0
);
TDB_PAGE_CCELLS_SET
(
pPage
,
pPage
->
pageSize
-
sizeof
(
SPageFtr
));
...
...
@@ -99,8 +102,7 @@ void tdbPageZero(SPage *pPage, u8 szAmHdr, int (*xCellSize)(const SPage *, SCell
ASSERT
((
u8
*
)
pPage
->
pPageFtr
==
pPage
->
pFreeEnd
);
}
void
tdbPageInit
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
))
{
void
tdbPageInit
(
SPage
*
pPage
,
u8
szAmHdr
,
int
(
*
xCellSize
)(
const
SPage
*
,
SCell
*
,
int
,
TXN
*
,
SBTree
*
pBt
))
{
pPage
->
pPageHdr
=
pPage
->
pData
+
szAmHdr
;
pPage
->
pCellIdx
=
pPage
->
pPageHdr
+
TDB_PAGE_HDR_SIZE
(
pPage
);
pPage
->
pFreeStart
=
pPage
->
pCellIdx
+
TDB_PAGE_OFFSET_SIZE
(
pPage
)
*
TDB_PAGE_NCELLS
(
pPage
);
...
...
@@ -124,9 +126,8 @@ int tdbPageInsertCell(SPage *pPage, int idx, SCell *pCell, int szCell, u8 asOvfl
nFree
=
TDB_PAGE_NFREE
(
pPage
);
nCells
=
TDB_PAGE_NCELLS
(
pPage
);
iOvfl
=
0
;
for
(
;
iOvfl
<
pPage
->
nOverflow
;
iOvfl
++
)
{
for
(
iOvfl
=
0
;
iOvfl
<
pPage
->
nOverflow
;
++
iOvfl
)
{
if
(
pPage
->
aiOvfl
[
iOvfl
]
>=
idx
)
{
break
;
}
...
...
@@ -146,6 +147,8 @@ int tdbPageInsertCell(SPage *pPage, int idx, SCell *pCell, int szCell, u8 asOvfl
pNewCell
=
(
SCell
*
)
tdbOsMalloc
(
szCell
);
memcpy
(
pNewCell
,
pCell
,
szCell
);
tdbDebug
(
"tdbPage/new ovfl cell: %p"
,
pNewCell
);
pPage
->
apOvfl
[
iOvfl
]
=
pNewCell
;
pPage
->
aiOvfl
[
iOvfl
]
=
idx
;
pPage
->
nOverflow
++
;
...
...
@@ -193,6 +196,8 @@ int tdbPageDropCell(SPage *pPage, int idx, TXN *pTxn, SBTree *pBt) {
for
(;
iOvfl
<
pPage
->
nOverflow
;
iOvfl
++
)
{
if
(
pPage
->
aiOvfl
[
iOvfl
]
==
idx
)
{
// remove the over flow cell
tdbOsFree
(
pPage
->
apOvfl
[
iOvfl
]);
tdbDebug
(
"tdbPage/free ovfl cell: %p"
,
pPage
->
apOvfl
[
iOvfl
]);
for
(;
(
++
iOvfl
)
<
pPage
->
nOverflow
;)
{
pPage
->
aiOvfl
[
iOvfl
-
1
]
=
pPage
->
aiOvfl
[
iOvfl
]
-
1
;
pPage
->
apOvfl
[
iOvfl
-
1
]
=
pPage
->
apOvfl
[
iOvfl
];
...
...
@@ -248,7 +253,7 @@ void tdbPageCopy(SPage *pFromPage, SPage *pToPage) {
int
tdbPageCapacity
(
int
pageSize
,
int
amHdrSize
)
{
int
szPageHdr
;
int
minCellIndexSize
;
// at least one cell in cell index
int
minCellIndexSize
;
// at least one cell in cell index
if
(
pageSize
<
65536
)
{
szPageHdr
=
pageMethods
.
szPageHdr
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录