From 32affb821c02201db7f30c5d8206439932e084be Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 16 Jun 2016 12:07:18 +0100 Subject: [PATCH] [Fix] Fix redis timeout events handling --- src/libstat/backends/redis_backend.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libstat/backends/redis_backend.c b/src/libstat/backends/redis_backend.c index a2924d054..5f6eecdcf 100644 --- a/src/libstat/backends/redis_backend.c +++ b/src/libstat/backends/redis_backend.c @@ -705,17 +705,19 @@ rspamd_redis_timeout (gint fd, short what, gpointer d) task = rt->task; + REF_RETAIN (rt); msg_err_task_check ("connection to redis server %s timed out", rspamd_upstream_name (rt->selected)); rspamd_upstream_fail (rt->selected); - if (rt->conn_state != RSPAMD_REDIS_CONNECTED) { + if (rt->conn_state == RSPAMD_REDIS_CONNECTED) { rspamd_session_remove_event (task->s, rspamd_redis_fin, rt); } rt->conn_state = RSPAMD_REDIS_TIMEDOUT; redisAsyncFree (rt->redis); rt->redis = NULL; + REF_RELEASE (rt); } /* Called when we have connected to the redis server and got stats */ @@ -1088,6 +1090,10 @@ rspamd_redis_init (struct rspamd_stat_ctx *ctx, static void rspamd_redis_runtime_dtor (struct redis_stat_runtime *rt) { + if (event_get_base (&rt->timeout_event)) { + event_del (&rt->timeout_event); + } + g_slice_free1 (sizeof (*rt), rt); } -- 2.39.5