Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
8e2d0820
Commit
8e2d0820
authored
Jun 28, 2013
by
antirez
Browse files
ae.c event loop: API to resize the fd set size on the run.
parent
3130670b
Changes
6
Hide whitespace changes
Inline
Side-by-side
src/ae.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment