{
struct lua_redis_userdata *ud;
struct lua_redis_specific_userdata *cur, *tmp;
- gboolean is_connected = FALSE;
+ gboolean is_connected = FALSE, is_successfull = TRUE;
struct redisAsyncContext *ac;
if (ctx->async) {
ud = &ctx->d.async;
if (ud->ctx) {
+
+ LL_FOREACH_SAFE (ud->specific, cur, tmp) {
+ if (is_connected) {
+ event_del (&cur->timeout);
+ }
+
+ if (!cur->replied) {
+ is_successfull = FALSE;
+ }
+ }
+
ud->terminated = 1;
/*
* On calling of redisFree, hiredis calls for callbacks pending
ac = ud->ctx;
ud->ctx = NULL;
rspamd_redis_pool_release_connection (ud->task->cfg->redis_pool,
- ac, FALSE);
+ ac, is_successfull);
ctx->ref.refcount = 0;
is_connected = TRUE;
}
+
LL_FOREACH_SAFE (ud->specific, cur, tmp) {
lua_redis_free_args (cur->args, cur->nargs);
- if (is_connected) {
- event_del (&cur->timeout);
- }
-
if (cur->cbref != -1) {
luaL_unref (ud->L, LUA_REGISTRYINDEX, cur->cbref);
}
ctx = sp_ud->ctx;
event_del (&sp_ud->timeout);
msg_debug ("finished redis query %p from session %p", sp_ud, ctx);
- sp_ud->replied = TRUE;
sp_ud->c->terminated = TRUE;
REDIS_RELEASE (ctx);
}
+ sp_ud->replied = TRUE;
rspamd_session_watcher_pop (ud->task->s, sp_ud->w);
rspamd_session_remove_event (ud->task->s, lua_redis_fin, sp_ud);
}