From: Vsevolod Stakhov Date: Thu, 23 Sep 2021 13:02:34 +0000 (+0100) Subject: [Minor] Ensure that Redis inactive connections are well maintained X-Git-Tag: 3.1~120 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7721a1a19baa139b460ec6126987a4943b4facb6;p=thirdparty%2Frspamd.git [Minor] Ensure that Redis inactive connections are well maintained --- diff --git a/src/libserver/redis_pool.cxx b/src/libserver/redis_pool.cxx index 3d56623c83..052f2eb7c6 100644 --- a/src/libserver/redis_pool.cxx +++ b/src/libserver/redis_pool.cxx @@ -386,6 +386,9 @@ redis_pool_connection::schedule_timeout() -> void ctx, real_timeout); timeout.data = this; + /* Restore in case if these fields have been modified externally */ + ctx->data = this; + redisAsyncSetDisconnectCallback(ctx, redis_pool_connection::redis_on_disconnect); ev_timer_init(&timeout, redis_pool_connection::redis_conn_timeout_cb, real_timeout, real_timeout / 2.0); @@ -527,7 +530,7 @@ auto redis_pool::release_connection(redisAsyncContext *ctx, else { if (how == RSPAMD_REDIS_RELEASE_DEFAULT) { /* Ensure that there are no callbacks attached to this conn */ - if (ctx->replies.head == nullptr) { + if (ctx->replies.head == nullptr && (ctx->c.flags & REDIS_CONNECTED)) { /* Just move it to the inactive queue */ conn->state = rspamd_redis_pool_connection_state::RSPAMD_REDIS_POOL_CONN_INACTIVE; conn->elt->move_to_inactive(conn);