From: Vsevolod Stakhov Date: Tue, 26 Apr 2016 14:41:50 +0000 (+0100) Subject: [Feature] Allow pipelining for redis.make_request X-Git-Tag: 1.3.0~624 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7db64ece74622c7b5d079c0eb26118518a3dfd13;p=thirdparty%2Frspamd.git [Feature] Allow pipelining for redis.make_request --- 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; }