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
hiredis
Commits
18c55a8f
Commit
18c55a8f
authored
Dec 29, 2010
by
Pieter Noordhuis
Browse files
Scope event library related data and hooks to a struct
parent
8cb4d52c
Changes
5
Hide whitespace changes
Inline
Side-by-side
adapters/ae.h
View file @
18c55a8f
...
...
@@ -72,7 +72,7 @@ int redisAeAttach(aeEventLoop *loop, redisAsyncContext *ac) {
redisAeEvents
*
e
;
/* Nothing should be attached when something is already attached */
if
(
ac
->
_adapter_
data
!=
NULL
)
if
(
ac
->
ev
.
data
!=
NULL
)
return
REDIS_ERR
;
/* Create container for context and r/w events */
...
...
@@ -83,12 +83,12 @@ int redisAeAttach(aeEventLoop *loop, redisAsyncContext *ac) {
e
->
reading
=
e
->
writing
=
0
;
/* Register functions to start/stop listening for events */
ac
->
ev
A
ddRead
=
redisAeAddRead
;
ac
->
ev
D
elRead
=
redisAeDelRead
;
ac
->
ev
A
ddWrite
=
redisAeAddWrite
;
ac
->
ev
D
elWrite
=
redisAeDelWrite
;
ac
->
ev
C
leanup
=
redisAeCleanup
;
ac
->
_adapter_
data
=
e
;
ac
->
ev
.
a
ddRead
=
redisAeAddRead
;
ac
->
ev
.
d
elRead
=
redisAeDelRead
;
ac
->
ev
.
a
ddWrite
=
redisAeAddWrite
;
ac
->
ev
.
d
elWrite
=
redisAeDelWrite
;
ac
->
ev
.
c
leanup
=
redisAeCleanup
;
ac
->
ev
.
data
=
e
;
return
REDIS_OK
;
}
...
...
adapters/libev.h
View file @
18c55a8f
...
...
@@ -82,7 +82,7 @@ int redisLibevAttach(EV_P_ redisAsyncContext *ac) {
redisLibevEvents
*
e
;
/* Nothing should be attached when something is already attached */
if
(
ac
->
_adapter_
data
!=
NULL
)
if
(
ac
->
ev
.
data
!=
NULL
)
return
REDIS_ERR
;
/* Create container for context and r/w events */
...
...
@@ -98,12 +98,12 @@ int redisLibevAttach(EV_P_ redisAsyncContext *ac) {
e
->
wev
.
data
=
e
;
/* Register functions to start/stop listening for events */
ac
->
ev
A
ddRead
=
redisLibevAddRead
;
ac
->
ev
D
elRead
=
redisLibevDelRead
;
ac
->
ev
A
ddWrite
=
redisLibevAddWrite
;
ac
->
ev
D
elWrite
=
redisLibevDelWrite
;
ac
->
ev
C
leanup
=
redisLibevCleanup
;
ac
->
_adapter_
data
=
e
;
ac
->
ev
.
a
ddRead
=
redisLibevAddRead
;
ac
->
ev
.
d
elRead
=
redisLibevDelRead
;
ac
->
ev
.
a
ddWrite
=
redisLibevAddWrite
;
ac
->
ev
.
d
elWrite
=
redisLibevDelWrite
;
ac
->
ev
.
c
leanup
=
redisLibevCleanup
;
ac
->
ev
.
data
=
e
;
/* Initialize read/write events */
ev_io_init
(
&
e
->
rev
,
redisLibevReadEvent
,
c
->
fd
,
EV_READ
);
...
...
adapters/libevent.h
View file @
18c55a8f
...
...
@@ -52,7 +52,7 @@ int redisLibeventAttach(redisAsyncContext *ac, struct event_base *base) {
redisLibeventEvents
*
e
;
/* Nothing should be attached when something is already attached */
if
(
ac
->
_adapter_
data
!=
NULL
)
if
(
ac
->
ev
.
data
!=
NULL
)
return
REDIS_ERR
;
/* Create container for context and r/w events */
...
...
@@ -60,12 +60,12 @@ int redisLibeventAttach(redisAsyncContext *ac, struct event_base *base) {
e
->
context
=
ac
;
/* Register functions to start/stop listening for events */
ac
->
ev
A
ddRead
=
redisLibeventAddRead
;
ac
->
ev
D
elRead
=
redisLibeventDelRead
;
ac
->
ev
A
ddWrite
=
redisLibeventAddWrite
;
ac
->
ev
D
elWrite
=
redisLibeventDelWrite
;
ac
->
ev
C
leanup
=
redisLibeventCleanup
;
ac
->
_adapter_
data
=
e
;
ac
->
ev
.
a
ddRead
=
redisLibeventAddRead
;
ac
->
ev
.
d
elRead
=
redisLibeventDelRead
;
ac
->
ev
.
a
ddWrite
=
redisLibeventAddWrite
;
ac
->
ev
.
d
elWrite
=
redisLibeventDelWrite
;
ac
->
ev
.
c
leanup
=
redisLibeventCleanup
;
ac
->
ev
.
data
=
e
;
/* Initialize and install read/write events */
event_set
(
&
e
->
rev
,
c
->
fd
,
EV_READ
,
redisLibeventReadEvent
,
e
);
...
...
async.c
View file @
18c55a8f
...
...
@@ -50,13 +50,13 @@ static redisAsyncContext *redisAsyncInitialize(redisContext *c) {
ac
->
err
=
0
;
ac
->
errstr
=
NULL
;
ac
->
data
=
NULL
;
ac
->
_adapter_data
=
NULL
;
ac
->
evAddRead
=
NULL
;
ac
->
evDelRead
=
NULL
;
ac
->
evAddWrite
=
NULL
;
ac
->
evDelWrite
=
NULL
;
ac
->
evCleanup
=
NULL
;
ac
->
ev
.
data
=
NULL
;
ac
->
ev
.
addRead
=
NULL
;
ac
->
ev
.
delRead
=
NULL
;
ac
->
ev
.
addWrite
=
NULL
;
ac
->
ev
.
delWrite
=
NULL
;
ac
->
ev
.
cleanup
=
NULL
;
ac
->
onConnect
=
NULL
;
ac
->
onDisconnect
=
NULL
;
...
...
@@ -100,7 +100,7 @@ int redisAsyncSetConnectCallback(redisAsyncContext *ac, redisConnectCallback *fn
/* The common way to detect an established connection is to wait for
* the first write event to be fired. This assumes the related event
* library functions are already set. */
if
(
ac
->
ev
A
ddWrite
)
ac
->
ev
A
ddWrite
(
ac
->
_adapter_
data
);
if
(
ac
->
ev
.
a
ddWrite
)
ac
->
ev
.
a
ddWrite
(
ac
->
ev
.
data
);
return
REDIS_OK
;
}
return
REDIS_ERR
;
...
...
@@ -166,7 +166,7 @@ static void __redisAsyncFree(redisAsyncContext *ac) {
}
/* Signal event lib to clean up */
if
(
ac
->
ev
C
leanup
)
ac
->
ev
C
leanup
(
ac
->
_adapter_
data
);
if
(
ac
->
ev
.
c
leanup
)
ac
->
ev
.
c
leanup
(
ac
->
ev
.
data
);
/* Execute disconnect callback. When redisAsyncFree() initiated destroying
* this context, the status will always be REDIS_OK. */
...
...
@@ -279,7 +279,7 @@ void redisAsyncHandleRead(redisAsyncContext *ac) {
__redisAsyncDisconnect
(
ac
);
}
else
{
/* Always re-schedule reads */
if
(
ac
->
ev
A
ddRead
)
ac
->
ev
A
ddRead
(
ac
->
_adapter_
data
);
if
(
ac
->
ev
.
a
ddRead
)
ac
->
ev
.
a
ddRead
(
ac
->
ev
.
data
);
redisProcessCallbacks
(
ac
);
}
}
...
...
@@ -293,13 +293,13 @@ void redisAsyncHandleWrite(redisAsyncContext *ac) {
}
else
{
/* Continue writing when not done, stop writing otherwise */
if
(
!
done
)
{
if
(
ac
->
ev
A
ddWrite
)
ac
->
ev
A
ddWrite
(
ac
->
_adapter_
data
);
if
(
ac
->
ev
.
a
ddWrite
)
ac
->
ev
.
a
ddWrite
(
ac
->
ev
.
data
);
}
else
{
if
(
ac
->
ev
D
elWrite
)
ac
->
ev
D
elWrite
(
ac
->
_adapter_
data
);
if
(
ac
->
ev
.
d
elWrite
)
ac
->
ev
.
d
elWrite
(
ac
->
ev
.
data
);
}
/* Always schedule reads after writes */
if
(
ac
->
ev
A
ddRead
)
ac
->
ev
A
ddRead
(
ac
->
_adapter_
data
);
if
(
ac
->
ev
.
a
ddRead
)
ac
->
ev
.
a
ddRead
(
ac
->
ev
.
data
);
/* Fire onConnect when this is the first write event. */
if
(
!
(
c
->
flags
&
REDIS_CONNECTED
))
{
...
...
@@ -328,7 +328,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
__redisPushCallback
(
&
ac
->
replies
,
&
cb
);
/* Always schedule a write when the write buffer is non-empty */
if
(
ac
->
ev
A
ddWrite
)
ac
->
ev
A
ddWrite
(
ac
->
_adapter_
data
);
if
(
ac
->
ev
.
a
ddWrite
)
ac
->
ev
.
a
ddWrite
(
ac
->
ev
.
data
);
return
REDIS_OK
;
}
...
...
async.h
View file @
18c55a8f
...
...
@@ -66,16 +66,18 @@ typedef struct redisAsyncContext {
/* Not used by hiredis */
void
*
data
;
/* Used by the different event lib adapters to store their private data */
void
*
_adapter_data
;
/* Called when the library expects to start reading/writing.
* The supplied functions should be idempotent. */
void
(
*
evAddRead
)(
void
*
privdata
);
void
(
*
evDelRead
)(
void
*
privdata
);
void
(
*
evAddWrite
)(
void
*
privdata
);
void
(
*
evDelWrite
)(
void
*
privdata
);
void
(
*
evCleanup
)(
void
*
privdata
);
/* Event library data and hooks */
struct
{
void
*
data
;
/* Hooks that are called when the library expects to start
* reading/writing. These functions should be idempotent. */
void
(
*
addRead
)(
void
*
privdata
);
void
(
*
delRead
)(
void
*
privdata
);
void
(
*
addWrite
)(
void
*
privdata
);
void
(
*
delWrite
)(
void
*
privdata
);
void
(
*
cleanup
)(
void
*
privdata
);
}
ev
;
/* Called when either the connection is terminated due to an error or per
* user request. The status is set accordingly (REDIS_OK, REDIS_ERR). */
...
...
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