Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
c44d3b56
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 搜索 >>
提交
c44d3b56
编写于
4月 16, 2010
作者:
P
Pieter Noordhuis
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
store the hash iterator on the heap instead of the stack
上级
c811bb38
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
10 addition
and
7 deletion
+10
-7
redis.c
redis.c
+10
-7
未找到文件。
redis.c
浏览文件 @
c44d3b56
...
...
@@ -6174,7 +6174,8 @@ typedef struct {
dictEntry
*
de
;
}
hashIterator
;
static
void
hashInitIterator
(
robj
*
subject
,
hashIterator
*
hi
)
{
static
hashIterator
*
hashInitIterator
(
robj
*
subject
)
{
hashIterator
*
hi
=
zmalloc
(
sizeof
(
hashIterator
));
hi
->
encoding
=
subject
->
encoding
;
if
(
hi
->
encoding
==
REDIS_ENCODING_ZIPMAP
)
{
hi
->
zi
=
zipmapRewind
(
subject
->
ptr
);
...
...
@@ -6183,12 +6184,14 @@ static void hashInitIterator(robj *subject, hashIterator *hi) {
}
else
{
redisAssert
(
NULL
);
}
return
hi
;
}
static
void
hashReleaseIterator
(
hashIterator
*
hi
)
{
if
(
hi
->
encoding
==
REDIS_ENCODING_HT
)
{
dictReleaseIterator
(
hi
->
di
);
}
zfree
(
hi
);
}
/* Move to the next entry in the hash. Return REDIS_OK when the next entry
...
...
@@ -6372,7 +6375,7 @@ static void hlenCommand(redisClient *c) {
static
void
genericHgetallCommand
(
redisClient
*
c
,
int
flags
)
{
robj
*
o
,
*
lenobj
,
*
obj
;
unsigned
long
count
=
0
;
hashIterator
hi
;
hashIterator
*
hi
;
if
((
o
=
lookupKeyReadOrReply
(
c
,
c
->
argv
[
1
],
shared
.
emptymultibulk
))
==
NULL
||
checkType
(
c
,
o
,
REDIS_HASH
))
return
;
...
...
@@ -6381,20 +6384,20 @@ static void genericHgetallCommand(redisClient *c, int flags) {
addReply
(
c
,
lenobj
);
decrRefCount
(
lenobj
);
h
ashInitIterator
(
o
,
&
hi
);
while
(
hashNext
(
&
hi
)
!=
REDIS_ERR
)
{
h
i
=
hashInitIterator
(
o
);
while
(
hashNext
(
hi
)
!=
REDIS_ERR
)
{
if
(
flags
&
REDIS_HASH_KEY
)
{
obj
=
hashCurrent
(
&
hi
,
REDIS_HASH_KEY
);
obj
=
hashCurrent
(
hi
,
REDIS_HASH_KEY
);
addReplyBulk
(
c
,
obj
);
count
++
;
}
if
(
flags
&
REDIS_HASH_VALUE
)
{
obj
=
hashCurrent
(
&
hi
,
REDIS_HASH_VALUE
);
obj
=
hashCurrent
(
hi
,
REDIS_HASH_VALUE
);
addReplyBulk
(
c
,
obj
);
count
++
;
}
}
hashReleaseIterator
(
&
hi
);
hashReleaseIterator
(
hi
);
lenobj
->
ptr
=
sdscatprintf
(
sdsempty
(),
"*%lu
\r\n
"
,
count
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录