rspamd_fuzzy_redis_session_free_args (session);
REF_RELEASE (session->backend);
+ rspamd_upstream_unref (session->up);
g_free (session);
}
NULL,
0);
- session->up = up;
+ session->up = rspamd_upstream_ref (up);
addr = rspamd_upstream_addr_next (up);
g_assert (addr != NULL);
session->ctx = rspamd_redis_pool_connect (backend->pool,
NULL,
0);
- session->up = up;
+ session->up = rspamd_upstream_ref (up);
addr = rspamd_upstream_addr_next (up);
g_assert (addr != NULL);
session->ctx = rspamd_redis_pool_connect (backend->pool,
NULL,
0);
- session->up = up;
+ session->up = rspamd_upstream_ref (up);
addr = rspamd_upstream_addr_next (up);
g_assert (addr != NULL);
session->ctx = rspamd_redis_pool_connect (backend->pool,
NULL,
0);
- session->up = up;
+ session->up = rspamd_upstream_ref (up);
addr = rspamd_upstream_addr_next (up);
g_assert (addr != NULL);
session->ctx = rspamd_redis_pool_connect (backend->pool,
pool->register_context(ctx, this);
ctx->data = this;
- rspamd_random_hex((guchar *) tag, sizeof(tag));
+ memset(tag, 0, sizeof(tag));
+ rspamd_random_hex((guchar *)tag, sizeof(tag) - 1);
redisLibevAttach(pool->event_loop, ctx);
redisAsyncSetDisconnectCallback(ctx, redis_pool_connection::redis_on_disconnect);
DL_APPEND (ups->watchers, nw);
}
+
+struct upstream*
+rspamd_upstream_ref (struct upstream *up)
+{
+ REF_RETAIN (up);
+ return up;
+}
+
+void
+rspamd_upstream_unref (struct upstream *up)
+{
+ REF_RELEASE (up);
+}
*/
void rspamd_upstream_reresolve (struct upstream_ctx *ctx);
+/**
+ * Share ownership on upstream
+ * @param up
+ * @return
+ */
+struct upstream* rspamd_upstream_ref (struct upstream *up);
+/**
+ * Unshare ownership on upstream
+ * @param up
+ */
+void rspamd_upstream_unref (struct upstream *up);
+
#ifdef __cplusplus
}
#endif