Make moveToNextTask non-recursive

This commit is contained in:
Pieter Noordhuis 2010-11-04 13:26:45 +01:00
parent 9c4ee606d6
commit 183220bf60

View File

@ -186,8 +186,7 @@ static char *readLine(redisReader *r, int *_len) {
static void moveToNextTask(redisReader *r) { static void moveToNextTask(redisReader *r) {
redisReadTask *cur, *prv; redisReadTask *cur, *prv;
assert(r->ridx >= 0); while (r->ridx >= 0) {
/* Return a.s.a.p. when the stack is now empty. */ /* Return a.s.a.p. when the stack is now empty. */
if (r->ridx == 0) { if (r->ridx == 0) {
r->ridx--; r->ridx--;
@ -199,13 +198,14 @@ static void moveToNextTask(redisReader *r) {
assert(prv->type == REDIS_REPLY_ARRAY); assert(prv->type == REDIS_REPLY_ARRAY);
if (cur->idx == prv->elements-1) { if (cur->idx == prv->elements-1) {
r->ridx--; r->ridx--;
moveToNextTask(r);
} else { } else {
/* Reset the type because the next item can be anything */ /* Reset the type because the next item can be anything */
assert(cur->idx < prv->elements); assert(cur->idx < prv->elements);
cur->type = -1; cur->type = -1;
cur->elements = -1; cur->elements = -1;
cur->idx++; cur->idx++;
return;
}
} }
} }