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