Change order independant push logic to not change behavior.
Since redisGetReplyFromReader is exposed in a header file, we probably shouldn't modify how it behaves in any way. For this reason, handle the changed logic in an internal static helper method.
This commit is contained in:
parent
6204182aae
commit
dfa33e60b0
21
hiredis.c
21
hiredis.c
@ -1005,14 +1005,23 @@ static int redisHandledPushReply(redisContext *c, void *reply) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Internal helper function to try and get a reply from the reader,
|
/* Get a reply from our reader or set an error in the context. */
|
||||||
* or set an error in the context otherwise. */
|
|
||||||
int redisGetReplyFromReader(redisContext *c, void **reply) {
|
int redisGetReplyFromReader(redisContext *c, void **reply) {
|
||||||
do {
|
if (redisReaderGetReply(c->reader, reply) == REDIS_ERR) {
|
||||||
if (redisReaderGetReply(c->reader,reply) == REDIS_ERR) {
|
|
||||||
__redisSetError(c,c->reader->err,c->reader->errstr);
|
__redisSetError(c,c->reader->err,c->reader->errstr);
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return REDIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Internal helper to get the next reply from our reader while handling
|
||||||
|
* any PUSH messages we encounter along the way. This is separate from
|
||||||
|
* redisGetReplyFromReader so as to not change its behavior. */
|
||||||
|
static int redisNextInBandReplyFromReader(redisContext *c, void **reply) {
|
||||||
|
do {
|
||||||
|
if (redisGetReplyFromReader(c, reply) == REDIS_ERR)
|
||||||
|
return REDIS_ERR;
|
||||||
} while (redisHandledPushReply(c, *reply));
|
} while (redisHandledPushReply(c, *reply));
|
||||||
|
|
||||||
return REDIS_OK;
|
return REDIS_OK;
|
||||||
@ -1023,7 +1032,7 @@ int redisGetReply(redisContext *c, void **reply) {
|
|||||||
void *aux = NULL;
|
void *aux = NULL;
|
||||||
|
|
||||||
/* Try to read pending replies */
|
/* Try to read pending replies */
|
||||||
if (redisGetReplyFromReader(c,&aux) == REDIS_ERR)
|
if (redisNextInBandReplyFromReader(c,&aux) == REDIS_ERR)
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
|
|
||||||
/* For the blocking context, flush output buffer and read reply */
|
/* For the blocking context, flush output buffer and read reply */
|
||||||
@ -1039,7 +1048,7 @@ int redisGetReply(redisContext *c, void **reply) {
|
|||||||
if (redisBufferRead(c) == REDIS_ERR)
|
if (redisBufferRead(c) == REDIS_ERR)
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
|
|
||||||
if (redisGetReplyFromReader(c,&aux) == REDIS_ERR)
|
if (redisNextInBandReplyFromReader(c,&aux) == REDIS_ERR)
|
||||||
return REDIS_ERR;
|
return REDIS_ERR;
|
||||||
} while (aux == NULL);
|
} while (aux == NULL);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user