Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
e47e6300
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1187
Star
22018
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看板
提交
e47e6300
编写于
7月 31, 2020
作者:
H
Haojun Liao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[td-225] refactor codes.
上级
4a508cdf
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
17 addition
and
10 deletion
+17
-10
src/util/inc/hash.h
src/util/inc/hash.h
+1
-1
src/util/src/hash.c
src/util/src/hash.c
+3
-2
src/util/src/tcache.c
src/util/src/tcache.c
+13
-7
未找到文件。
src/util/inc/hash.h
浏览文件 @
e47e6300
...
...
@@ -103,7 +103,7 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen);
* @param key
* @param keyLen
*/
void
taosHashRemove
(
SHashObj
*
pHashObj
,
const
void
*
key
,
size_t
keyLen
);
int32_t
taosHashRemove
(
SHashObj
*
pHashObj
,
const
void
*
key
,
size_t
keyLen
);
void
taosHashRemoveNode
();
...
...
src/util/src/hash.c
浏览文件 @
e47e6300
...
...
@@ -258,14 +258,14 @@ void *taosHashGet(SHashObj *pHashObj, const void *key, size_t keyLen) {
}
}
void
taosHashRemove
(
SHashObj
*
pHashObj
,
const
void
*
key
,
size_t
keyLen
)
{
int32_t
taosHashRemove
(
SHashObj
*
pHashObj
,
const
void
*
key
,
size_t
keyLen
)
{
uint32_t
hashVal
=
(
*
pHashObj
->
hashFp
)(
key
,
keyLen
);
__wr_lock
(
pHashObj
->
lock
);
SHashNode
*
pNode
=
doGetNodeFromHashTable
(
pHashObj
,
key
,
keyLen
,
hashVal
);
if
(
pNode
==
NULL
)
{
__unlock
(
pHashObj
->
lock
);
return
;
return
-
1
;
}
SHashNode
*
pNext
=
pNode
->
next
;
...
...
@@ -289,6 +289,7 @@ void taosHashRemove(SHashObj *pHashObj, const void *key, size_t keyLen) {
pNode
->
prev
=
NULL
;
tfree
(
pNode
);
return
0
;
}
void
taosHashCleanup
(
SHashObj
*
pHashObj
)
{
...
...
src/util/src/tcache.c
浏览文件 @
e47e6300
...
...
@@ -207,7 +207,7 @@ SCacheObj *taosCacheInit(int32_t keyType, int64_t refreshTimeInSeconds, bool ext
return
NULL
;
}
pCacheObj
->
pHashTable
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
keyType
),
fals
e
);
pCacheObj
->
pHashTable
=
taosHashInit
(
128
,
taosGetDefaultHashFunction
(
keyType
),
tru
e
);
pCacheObj
->
name
=
strdup
(
cacheName
);
if
(
pCacheObj
->
pHashTable
==
NULL
)
{
free
(
pCacheObj
);
...
...
@@ -268,7 +268,9 @@ void *taosCachePut(SCacheObj *pCacheObj, const void *key, size_t keyLen, const v
if
(
T_REF_VAL_GET
(
pOld
)
>
0
)
{
// todo removed by node, instead of by key
taosHashRemove
(
pCacheObj
->
pHashTable
,
pOld
->
key
,
pOld
->
keySize
);
int32_t
succ
=
taosHashRemove
(
pCacheObj
->
pHashTable
,
pOld
->
key
,
pOld
->
keySize
);
assert
(
succ
==
0
);
addToTrashcan
=
true
;
}
...
...
@@ -413,7 +415,7 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
}
if
(
_remove
)
{
__cache_wr_lock
(
pCacheObj
);
//
__cache_wr_lock(pCacheObj);
// NOTE: once refcount is decrease, pNode may be freed by other thread immediately.
int32_t
ref
=
T_REF_DEC
(
pNode
);
...
...
@@ -427,22 +429,26 @@ void taosCacheRelease(SCacheObj *pCacheObj, void **data, bool _remove) {
* that tries to do the same thing.
*/
if
(
pNode
->
inTrashCan
)
{
__cache_unlock
(
pCacheObj
);
//
__cache_unlock(pCacheObj);
if
(
ref
==
0
)
{
assert
(
pNode
->
pTNodeHeader
->
pData
==
pNode
);
taosRemoveFromTrashCan
(
pCacheObj
,
pNode
->
pTNodeHeader
);
}
}
else
{
taosHashRemove
(
pCacheObj
->
pHashTable
,
pNode
->
key
,
pNode
->
keySize
);
__cache_unlock
(
pCacheObj
);
int32_t
success
=
taosHashRemove
(
pCacheObj
->
pHashTable
,
pNode
->
key
,
pNode
->
keySize
);
if
(
ref
>
0
)
{
assert
(
pNode
->
pTNodeHeader
==
NULL
);
// todo trashcan lock
taosAddToTrash
(
pCacheObj
,
pNode
);
if
(
success
)
{
taosAddToTrash
(
pCacheObj
,
pNode
);
}
// __cache_unlock(pCacheObj);
}
else
{
// __cache_unlock(pCacheObj);
// taosCacheReleaseNode(pCacheObj, pNode);
atomic_fetch_sub_ptr
(
&
pCacheObj
->
totalSize
,
pNode
->
size
);
uDebug
(
"cache:%s, key:%p, %p is destroyed from cache, totalNum:%d totalSize:%"
PRId64
"bytes size:%dbytes"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录