Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
3554f09d
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,发现更多精彩内容 >>
提交
3554f09d
编写于
5月 07, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '2.2' of github.com:antirez/redis into 2.2
上级
ccab83e7
97ddfbbf
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
54 addition
and
36 deletion
+54
-36
00-RELEASENOTES
00-RELEASENOTES
+9
-0
src/networking.c
src/networking.c
+10
-4
src/version.h
src/version.h
+1
-1
src/ziplist.c
src/ziplist.c
+34
-31
未找到文件。
00-RELEASENOTES
浏览文件 @
3554f09d
...
...
@@ -12,6 +12,15 @@ for 2.0.
CHANGELOG
---------
What's new in Redis 2.2.6
=========================
* Fixed bug #543. If you saw Redis instances crashing on List operations
(only happening with a non-default max entry size ziplist setting in
redis.conf) it was almost certainly this problem.
* Fixed a bug with replication where SLAVEOF NO ONE caused a slave to close the
connection with all its slaves.
What's new in Redis 2.2.5
=========================
...
...
src/networking.c
浏览文件 @
3554f09d
...
...
@@ -523,10 +523,16 @@ void freeClient(redisClient *c) {
* close the connection with all our slaves if we have any, so
* when we'll resync with the master the other slaves will sync again
* with us as well. Note that also when the slave is not connected
* to the master it will keep refusing connections by other slaves. */
while
(
listLength
(
server
.
slaves
))
{
ln
=
listFirst
(
server
.
slaves
);
freeClient
((
redisClient
*
)
ln
->
value
);
* to the master it will keep refusing connections by other slaves.
*
* We do this only if server.masterhost != NULL. If it is NULL this
* means the user called SLAVEOF NO ONE and we are freeing our
* link with the master, so no need to close link with slaves. */
if
(
server
.
masterhost
!=
NULL
)
{
while
(
listLength
(
server
.
slaves
))
{
ln
=
listFirst
(
server
.
slaves
);
freeClient
((
redisClient
*
)
ln
->
value
);
}
}
}
/* Release memory */
...
...
src/version.h
浏览文件 @
3554f09d
#define REDIS_VERSION "2.2.
5
"
#define REDIS_VERSION "2.2.
6
"
src/ziplist.c
浏览文件 @
3554f09d
...
...
@@ -398,12 +398,17 @@ static unsigned char *__ziplistCascadeUpdate(unsigned char *zl, unsigned char *p
offset
=
p
-
zl
;
extra
=
rawlensize
-
next
.
prevrawlensize
;
zl
=
ziplistResize
(
zl
,
curlen
+
extra
);
ZIPLIST_TAIL_OFFSET
(
zl
)
+=
extra
;
p
=
zl
+
offset
;
/*
Move the tail to the back
. */
/*
Current pointer and offset for next element
. */
np
=
p
+
rawlen
;
noffset
=
np
-
zl
;
/* Update tail offset when next element is not the tail element. */
if
((
zl
+
ZIPLIST_TAIL_OFFSET
(
zl
))
!=
np
)
ZIPLIST_TAIL_OFFSET
(
zl
)
+=
extra
;
/* Move the tail to the back. */
memmove
(
np
+
rawlensize
,
np
+
next
.
prevrawlensize
,
curlen
-
noffset
-
next
.
prevrawlensize
-
1
);
...
...
@@ -877,7 +882,7 @@ void pop(unsigned char *zl, int where) {
}
}
void
randstring
(
char
*
target
,
unsigned
int
min
,
unsigned
int
max
)
{
int
randstring
(
char
*
target
,
unsigned
int
min
,
unsigned
int
max
)
{
int
p
,
len
=
min
+
rand
()
%
(
max
-
min
+
1
);
int
minval
,
maxval
;
switch
(
rand
()
%
3
)
{
...
...
@@ -899,10 +904,9 @@ void randstring(char *target, unsigned int min, unsigned int max) {
while
(
p
<
len
)
target
[
p
++
]
=
minval
+
rand
()
%
(
maxval
-
minval
+
1
);
return
;
return
len
;
}
int
main
(
int
argc
,
char
**
argv
)
{
unsigned
char
*
zl
,
*
p
;
unsigned
char
*
entry
;
...
...
@@ -1235,6 +1239,7 @@ int main(int argc, char **argv) {
int
i
,
j
,
len
,
where
;
unsigned
char
*
p
;
char
buf
[
1024
];
int
buflen
;
list
*
ref
;
listNode
*
refnode
;
...
...
@@ -1243,10 +1248,6 @@ int main(int argc, char **argv) {
unsigned
int
slen
;
long
long
sval
;
/* In the regression for the cascade bug, it was triggered
* with a random seed of 2. */
srand
(
2
);
for
(
i
=
0
;
i
<
20000
;
i
++
)
{
zl
=
ziplistNew
();
ref
=
listCreate
();
...
...
@@ -1256,31 +1257,32 @@ int main(int argc, char **argv) {
/* Create lists */
for
(
j
=
0
;
j
<
len
;
j
++
)
{
where
=
(
rand
()
&
1
)
?
ZIPLIST_HEAD
:
ZIPLIST_TAIL
;
switch
(
rand
()
%
4
)
{
case
0
:
sprintf
(
buf
,
"%lld"
,(
0LL
+
rand
())
>>
20
);
break
;
case
1
:
sprintf
(
buf
,
"%lld"
,(
0LL
+
rand
()));
break
;
case
2
:
sprintf
(
buf
,
"%lld"
,(
0LL
+
rand
())
<<
20
);
break
;
case
3
:
randstring
(
buf
,
0
,
256
);
break
;
default:
assert
(
NULL
);
if
(
rand
()
%
2
)
{
buflen
=
randstring
(
buf
,
1
,
sizeof
(
buf
)
-
1
);
}
else
{
switch
(
rand
()
%
3
)
{
case
0
:
buflen
=
sprintf
(
buf
,
"%lld"
,(
0LL
+
rand
())
>>
20
);
break
;
case
1
:
buflen
=
sprintf
(
buf
,
"%lld"
,(
0LL
+
rand
()));
break
;
case
2
:
buflen
=
sprintf
(
buf
,
"%lld"
,(
0LL
+
rand
())
<<
20
);
break
;
default:
assert
(
NULL
);
}
}
/* Add to ziplist */
zl
=
ziplistPush
(
zl
,
(
unsigned
char
*
)
buf
,
strlen
(
buf
)
,
where
);
zl
=
ziplistPush
(
zl
,
(
unsigned
char
*
)
buf
,
buflen
,
where
);
/* Add to reference list */
if
(
where
==
ZIPLIST_HEAD
)
{
listAddNodeHead
(
ref
,
sdsnew
(
buf
));
listAddNodeHead
(
ref
,
sdsnew
len
(
buf
,
buflen
));
}
else
if
(
where
==
ZIPLIST_TAIL
)
{
listAddNodeTail
(
ref
,
sdsnew
(
buf
));
listAddNodeTail
(
ref
,
sdsnew
len
(
buf
,
buflen
));
}
else
{
assert
(
NULL
);
}
...
...
@@ -1295,12 +1297,13 @@ int main(int argc, char **argv) {
assert
(
ziplistGet
(
p
,
&
sstr
,
&
slen
,
&
sval
));
if
(
sstr
==
NULL
)
{
sprintf
(
buf
,
"%lld"
,
sval
);
buflen
=
sprintf
(
buf
,
"%lld"
,
sval
);
}
else
{
memcpy
(
buf
,
sstr
,
slen
);
buf
[
slen
]
=
'\0'
;
buflen
=
slen
;
memcpy
(
buf
,
sstr
,
buflen
);
buf
[
buflen
]
=
'\0'
;
}
assert
(
strcmp
(
buf
,
listNodeValue
(
refnode
)
)
==
0
);
assert
(
memcmp
(
buf
,
listNodeValue
(
refnode
),
buflen
)
==
0
);
}
zfree
(
zl
);
listRelease
(
ref
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录