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
7ec4df94
Commit
7ec4df94
authored
Jul 31, 2012
by
Pieter Noordhuis
Browse files
Spontaneous error reply can always happen
parent
f2ddeeae
Changes
1
Show whitespace changes
Inline
Side-by-side
async.c
View file @
7ec4df94
...
@@ -386,14 +386,22 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
...
@@ -386,14 +386,22 @@ void redisProcessCallbacks(redisAsyncContext *ac) {
/* Even if the context is subscribed, pending regular callbacks will
/* Even if the context is subscribed, pending regular callbacks will
* get a reply before pub/sub messages arrive. */
* get a reply before pub/sub messages arrive. */
if
(
__redisShiftCallback
(
&
ac
->
replies
,
&
cb
)
!=
REDIS_OK
)
{
if
(
__redisShiftCallback
(
&
ac
->
replies
,
&
cb
)
!=
REDIS_OK
)
{
/* A spontaneous reply in a not-subscribed context can only be the
/*
* error reply that is sent when a new connection exceeds the
* A spontaneous reply in a not-subscribed context can be the error
* maximum number of allowed connections on the server side. This
* reply that is sent when a new connection exceeds the maximum
* is seen as an error instead of a regular reply because the
* number of allowed connections on the server side.
* server closes the connection after sending it. To prevent the
*
* error from being overwritten by an EOF error the connection is
* This is seen as an error instead of a regular reply because the
* closed here. See issue #43. */
* server closes the connection after sending it.
if
(
!
(
c
->
flags
&
REDIS_SUBSCRIBED
)
&&
((
redisReply
*
)
reply
)
->
type
==
REDIS_REPLY_ERROR
)
{
*
* To prevent the error from being overwritten by an EOF error the
* connection is closed here. See issue #43.
*
* Another possibility is that the server is loading its dataset.
* In this case we also want to close the connection, and have the
* user wait until the server is ready to take our request.
*/
if
(((
redisReply
*
)
reply
)
->
type
==
REDIS_REPLY_ERROR
)
{
c
->
err
=
REDIS_ERR_OTHER
;
c
->
err
=
REDIS_ERR_OTHER
;
snprintf
(
c
->
errstr
,
sizeof
(
c
->
errstr
),
"%s"
,((
redisReply
*
)
reply
)
->
str
);
snprintf
(
c
->
errstr
,
sizeof
(
c
->
errstr
),
"%s"
,((
redisReply
*
)
reply
)
->
str
);
__redisAsyncDisconnect
(
ac
);
__redisAsyncDisconnect
(
ac
);
...
...
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