Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
705dad38
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
705dad38
编写于
4月 16, 2010
作者:
P
Pieter Noordhuis
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
make sortCommand aware that lookupKeyByPattern always increased the refcount of the returned value
上级
a3f3af86
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
9 deletion
+16
-9
redis.c
redis.c
+16
-9
未找到文件。
redis.c
浏览文件 @
705dad38
...
...
@@ -6524,13 +6524,18 @@ static robj *lookupKeyByPattern(redisDb *db, robj *pattern, robj *subst) {
initStaticStringObject
(
keyobj
,((
char
*
)
&
keyname
)
+
(
sizeof
(
long
)
*
2
));
o
=
lookupKeyRead
(
db
,
&
keyobj
);
/* Retrieve value from hash by the field name */
if
(
o
!=
NULL
&&
fieldlen
>
0
)
{
/* Retrieve value from hash by the field name. This operation
* already increases the refcount of the returned object. */
if
(
o
->
type
!=
REDIS_HASH
||
fieldname
.
len
<
1
)
{
return
NULL
;
}
initStaticStringObject
(
fieldobj
,((
char
*
)
&
fieldname
)
+
(
sizeof
(
long
)
*
2
));
o
=
hashGet
(
o
,
&
fieldobj
);
}
else
{
/* Every object that this function returns needs to have its refcount
* increased. sortCommand decreases it again. */
incrRefCount
(
o
);
}
return
o
;
...
...
@@ -6701,15 +6706,17 @@ static void sortCommand(redisClient *c) {
if
(
sortby
)
{
/* lookup value to sort by */
byval
=
lookupKeyByPattern
(
c
->
db
,
sortby
,
vector
[
j
].
obj
);
if
(
!
byval
||
byval
->
type
!=
REDIS_STRING
)
continue
;
if
(
!
byval
)
continue
;
if
(
byval
->
type
!=
REDIS_STRING
)
{
decrRefCount
(
byval
);
continue
;
}
}
else
{
/* use object itself to sort by */
byval
=
vector
[
j
].
obj
;
}
if
(
alpha
)
{
/* getDecodedObject increments refcount, so the corresponding
* decrRefCount will clean up values coming from a zipmap. */
vector
[
j
].
u
.
cmpobj
=
getDecodedObject
(
byval
);
}
else
{
if
(
byval
->
encoding
==
REDIS_ENCODING_RAW
)
{
...
...
@@ -6722,12 +6729,12 @@ static void sortCommand(redisClient *c) {
}
else
{
redisAssert
(
1
!=
1
);
}
}
/* clean up immediately if this value came from a zipmap */
if
(
byval
->
refcount
==
0
)
{
byval
->
refcount
=
1
;
decrRefCount
(
byval
);
}
/* when the object was retrieved using lookupKeyByPattern,
* its refcount needs to be decreased. */
if
(
sortby
)
{
decrRefCount
(
byval
);
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录