From 7db64ece74622c7b5d079c0eb26118518a3dfd13 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 26 Apr 2016 15:41:50 +0100 Subject: [PATCH] [Feature] Allow pipelining for redis.make_request --- src/lua/lua_redis.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/lua/lua_redis.c b/src/lua/lua_redis.c index 3341b0a7bf..9375a6a8ba 100644 --- a/src/lua/lua_redis.c +++ b/src/lua/lua_redis.c @@ -431,7 +431,7 @@ lua_redis_connect_cb (const struct redisAsyncContext *c, int status) static int lua_redis_make_request (lua_State *L) { - struct lua_redis_ctx *ctx; + struct lua_redis_ctx *ctx, **pctx; rspamd_inet_addr_t *ip = NULL; struct lua_redis_userdata *ud; struct lua_redis_specific_userdata *sp_ud; @@ -641,17 +641,28 @@ lua_redis_make_request (lua_State *L) event_set (&sp_ud->timeout, -1, EV_TIMEOUT, lua_redis_timeout, sp_ud); event_base_set (ud->task->ev_base, &sp_ud->timeout); event_add (&sp_ud->timeout, &tv); + ret = TRUE; } else { msg_info ("call to redis failed: %s", ud->ctx->errstr); redisAsyncFree (ud->ctx); ud->ctx = NULL; REF_RELEASE (ctx); + ret = FALSE; } } lua_pushboolean (L, ret); + if (ret) { + + pctx = lua_newuserdata (L, sizeof (ctx)); + *pctx = ctx; + rspamd_lua_setclass (L, "rspamd{redis}", -1); + + return 2; + } + return 1; } -- 2.47.3