Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
别团等shy哥发育
redis
提交
8e2d0820
R
redis
项目概览
别团等shy哥发育
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
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,发现更多精彩内容 >>
提交
8e2d0820
编写于
6月 28, 2013
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ae.c event loop: API to resize the fd set size on the run.
上级
3130670b
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
57 addition
and
1 deletion
+57
-1
src/ae.c
src/ae.c
+30
-0
src/ae.h
src/ae.h
+2
-0
src/ae_epoll.c
src/ae_epoll.c
+7
-0
src/ae_evport.c
src/ae_evport.c
+5
-0
src/ae_kqueue.c
src/ae_kqueue.c
+7
-1
src/ae_select.c
src/ae_select.c
+6
-0
未找到文件。
src/ae.c
浏览文件 @
8e2d0820
...
...
@@ -91,6 +91,36 @@ err:
return
NULL
;
}
/* Return the current set size. */
int
aeGetSetSize
(
aeEventLoop
*
eventLoop
)
{
return
eventLoop
->
setsize
;
}
/* Resize the maximum set size of the event loop.
* If the requested set size is smaller than the current set size, but
* there is already a file descriptor in use that is >= the requested
* set size minus one, AE_ERR is returned and the operation is not
* performed at all.
*
* Otherwise AE_OK is returned and the operation is successful. */
int
aeResizeSetSize
(
aeEventLoop
*
eventLoop
,
int
setsize
)
{
int
i
;
if
(
setsize
==
eventLoop
->
setsize
)
return
AE_OK
;
if
(
eventLoop
->
maxfd
>=
setsize
)
return
AE_ERR
;
if
(
aeApiResize
(
eventLoop
,
setsize
)
==
-
1
)
return
AE_ERR
;
eventLoop
->
events
=
zrealloc
(
eventLoop
->
events
,
sizeof
(
aeFileEvent
)
*
setsize
);
eventLoop
->
fired
=
zrealloc
(
eventLoop
->
fired
,
sizeof
(
aeFiredEvent
)
*
setsize
);
eventLoop
->
setsize
=
setsize
;
/* Make sure that if we created new slots, they are initialized with
* an AE_NONE mask. */
for
(
i
=
eventLoop
->
maxfd
+
1
;
i
<
setsize
;
i
++
)
eventLoop
->
events
[
i
].
mask
=
AE_NONE
;
return
AE_OK
;
}
void
aeDeleteEventLoop
(
aeEventLoop
*
eventLoop
)
{
aeApiFree
(
eventLoop
);
zfree
(
eventLoop
->
events
);
...
...
src/ae.h
浏览文件 @
8e2d0820
...
...
@@ -114,5 +114,7 @@ int aeWait(int fd, int mask, long long milliseconds);
void
aeMain
(
aeEventLoop
*
eventLoop
);
char
*
aeGetApiName
(
void
);
void
aeSetBeforeSleepProc
(
aeEventLoop
*
eventLoop
,
aeBeforeSleepProc
*
beforesleep
);
int
aeGetSetSize
(
aeEventLoop
*
eventLoop
);
int
aeResizeSetSize
(
aeEventLoop
*
eventLoop
,
int
setsize
);
#endif
src/ae_epoll.c
浏览文件 @
8e2d0820
...
...
@@ -55,6 +55,13 @@ static int aeApiCreate(aeEventLoop *eventLoop) {
return
0
;
}
static
int
aeApiResize
(
aeEventLoop
*
eventLoop
,
int
setsize
)
{
aeApiState
*
state
=
eventLoop
->
apidata
;
state
->
events
=
zrealloc
(
state
->
events
,
sizeof
(
struct
epoll_event
)
*
setsize
);
return
0
;
}
static
void
aeApiFree
(
aeEventLoop
*
eventLoop
)
{
aeApiState
*
state
=
eventLoop
->
apidata
;
...
...
src/ae_evport.c
浏览文件 @
8e2d0820
...
...
@@ -94,6 +94,11 @@ static int aeApiCreate(aeEventLoop *eventLoop) {
return
0
;
}
static
int
aeApiResize
(
aeEventLoop
*
eventLoop
,
int
setsize
)
{
/* Nothing to resize here. */
return
0
;
}
static
void
aeApiFree
(
aeEventLoop
*
eventLoop
)
{
aeApiState
*
state
=
eventLoop
->
apidata
;
...
...
src/ae_kqueue.c
浏览文件 @
8e2d0820
...
...
@@ -54,10 +54,16 @@ static int aeApiCreate(aeEventLoop *eventLoop) {
return
-
1
;
}
eventLoop
->
apidata
=
state
;
return
0
;
}
static
int
aeApiResize
(
aeEventLoop
*
eventLoop
,
int
setsize
)
{
aeApiState
*
state
=
eventLoop
->
apidata
;
state
->
events
=
zrealloc
(
state
->
events
,
sizeof
(
struct
kevent
)
*
setsize
);
return
0
;
}
static
void
aeApiFree
(
aeEventLoop
*
eventLoop
)
{
aeApiState
*
state
=
eventLoop
->
apidata
;
...
...
src/ae_select.c
浏览文件 @
8e2d0820
...
...
@@ -48,6 +48,12 @@ static int aeApiCreate(aeEventLoop *eventLoop) {
return
0
;
}
static
int
aeApiResize
(
aeEventLoop
*
eventLoop
,
int
setsize
)
{
/* Just ensure we have enough room in the fd_set type. */
if
(
setsize
>=
FD_SETSIZE
)
return
-
1
;
return
0
;
}
static
void
aeApiFree
(
aeEventLoop
*
eventLoop
)
{
zfree
(
eventLoop
->
apidata
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录