Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
fa77356c
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fa77356c
编写于
4月 20, 2023
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: restore tdb page cache lock
上级
36f3e440
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
10 addition
and
15 deletion
+10
-15
source/libs/tdb/src/db/tdbPCache.c
source/libs/tdb/src/db/tdbPCache.c
+10
-15
未找到文件。
source/libs/tdb/src/db/tdbPCache.c
浏览文件 @
fa77356c
...
...
@@ -21,7 +21,7 @@ struct SPCache {
int
szPage
;
int
nPages
;
SPage
**
aPage
;
TdThreadRwlock
rwLock
;
tdb_mutex_t
mutex
;
int
nFree
;
SPage
*
pFree
;
int
nPage
;
...
...
@@ -44,11 +44,10 @@ static void tdbPCacheAddPageToHash(SPCache *pCache, SPage *pPage);
static
void
tdbPCacheUnpinPage
(
SPCache
*
pCache
,
SPage
*
pPage
);
static
int
tdbPCacheCloseImpl
(
SPCache
*
pCache
);
static
void
tdbPCacheInitLock
(
SPCache
*
pCache
)
{
taosThreadRwlockInit
(
&
(
pCache
->
rwLock
),
NULL
);
}
static
void
tdbPCacheDestroyLock
(
SPCache
*
pCache
)
{
taosThreadRwlockDestroy
(
&
(
pCache
->
rwLock
));
}
static
void
tdbPCacheRLock
(
SPCache
*
pCache
)
{
taosThreadRwlockRdlock
(
&
(
pCache
->
rwLock
));
}
static
void
tdbPCacheWLock
(
SPCache
*
pCache
)
{
taosThreadRwlockWrlock
(
&
(
pCache
->
rwLock
));
}
static
void
tdbPCacheUnlock
(
SPCache
*
pCache
)
{
taosThreadRwlockUnlock
(
&
(
pCache
->
rwLock
));
}
static
void
tdbPCacheInitLock
(
SPCache
*
pCache
)
{
tdbMutexInit
(
&
(
pCache
->
mutex
),
NULL
);
}
static
void
tdbPCacheDestroyLock
(
SPCache
*
pCache
)
{
tdbMutexDestroy
(
&
(
pCache
->
mutex
));
}
static
void
tdbPCacheLock
(
SPCache
*
pCache
)
{
tdbMutexLock
(
&
(
pCache
->
mutex
));
}
static
void
tdbPCacheUnlock
(
SPCache
*
pCache
)
{
tdbMutexUnlock
(
&
(
pCache
->
mutex
));
}
int
tdbPCacheOpen
(
int
pageSize
,
int
cacheSize
,
SPCache
**
ppCache
)
{
SPCache
*
pCache
;
...
...
@@ -159,7 +158,7 @@ static int tdbPCacheAlterImpl(SPCache *pCache, int32_t nPage) {
int
tdbPCacheAlter
(
SPCache
*
pCache
,
int32_t
nPage
)
{
int
ret
=
0
;
tdbPCache
W
Lock
(
pCache
);
tdbPCacheLock
(
pCache
);
ret
=
tdbPCacheAlterImpl
(
pCache
,
nPage
);
...
...
@@ -172,6 +171,8 @@ SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, TXN *pTxn) {
SPage
*
pPage
;
i32
nRef
=
0
;
tdbPCacheLock
(
pCache
);
pPage
=
tdbPCacheFetchImpl
(
pCache
,
pPgid
,
pTxn
);
if
(
pPage
)
{
nRef
=
tdbRefPage
(
pPage
);
...
...
@@ -192,7 +193,7 @@ SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, TXN *pTxn) {
}
void
tdbPCacheMarkFree
(
SPCache
*
pCache
,
SPage
*
pPage
)
{
tdbPCache
W
Lock
(
pCache
);
tdbPCacheLock
(
pCache
);
tdbPCacheRemovePageFromHash
(
pCache
,
pPage
);
pPage
->
isFree
=
1
;
tdbPCacheUnlock
(
pCache
);
...
...
@@ -240,7 +241,7 @@ void tdbPCacheRelease(SPCache *pCache, SPage *pPage, TXN *pTxn) {
return
;
}
tdbPCache
W
Lock
(
pCache
);
tdbPCacheLock
(
pCache
);
nRef
=
tdbUnrefPage
(
pPage
);
tdbTrace
(
"pcache/release page %p/%d/%d/%d"
,
pPage
,
TDB_PAGE_PGNO
(
pPage
),
pPage
->
id
,
nRef
);
if
(
nRef
==
0
)
{
...
...
@@ -274,8 +275,6 @@ static SPage *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, TXN *pTxn)
SPage
*
pPage
=
NULL
;
SPage
*
pPageH
=
NULL
;
tdbPCacheRLock
(
pCache
);
if
(
!
pTxn
)
{
tdbError
(
"tdb/pcache: null ptr pTxn, fetch impl failed."
);
return
NULL
;
...
...
@@ -295,10 +294,6 @@ static SPage *tdbPCacheFetchImpl(SPCache *pCache, const SPgid *pPgid, TXN *pTxn)
}
}
tdbPCacheUnlock
(
pCache
);
tdbPCacheWLock
(
pCache
);
// 1. pPage == NULL
// 2. pPage && pPage->isLocal == 0 && !TDB_TXN_IS_WRITE(pTxn)
pPageH
=
pPage
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录