bool cmd_sent;
bool seen_results;
+ bool iterating;
bool finished;
bool deinit;
};
cmd->query);
}
}
- if (ctx->ctx.async_callback != NULL) {
+ if (ctx->ctx.async_callback == NULL) {
+ /* synchronous lookup */
+ io_loop_stop(dict->dict.ioloop);
+ } else if (ctx->iterating) {
+ /* We're already in client_dict_iterate(). Don't call the
+ async callback, because it would just recurse and possibly
+ break. */
+ } else {
dict_pre_api_callback(&dict->dict);
ctx->ctx.async_callback(ctx->ctx.async_context);
dict_post_api_callback(&dict->dict);
- } else {
- /* synchronous lookup */
- io_loop_stop(dict->dict.ioloop);
}
}
}
if (!ctx->cmd_sent) {
ctx->cmd_sent = TRUE;
+ ctx->iterating = TRUE;
client_dict_iterate_cmd_send(ctx);
+ ctx->iterating = FALSE;
return client_dict_iterate(_ctx, key_r, values_r);
}
ctx->ctx.has_more = !ctx->finished;