]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Revert "[Fix] Fix hiredis stupidity" and use the hiredis api as intended 3313/head
authorPetr Vaněk <arkamar@atlas.cz>
Sun, 29 Mar 2020 00:06:54 +0000 (01:06 +0100)
committerPetr Vaněk <arkamar@atlas.cz>
Sun, 29 Mar 2020 10:17:59 +0000 (12:17 +0200)
This reverts commit b05b9bf904edce75c17e63982d5e0a82dd3e9064.

contrib/hiredis/async.c
contrib/hiredis/async.h
src/libserver/redis_pool.c

index 8516762636cc6236730121c4059ff1c920e9794a..4a2cadf8b93d9c9066b4c3603aa168c7fdf12861 100644 (file)
@@ -129,7 +129,6 @@ static redisAsyncContext *redisAsyncInitialize(redisContext *c) {
 
     ac->onConnect = NULL;
     ac->onDisconnect = NULL;
-    ac->disconnectCbdata = NULL;
 
     ac->replies.head = NULL;
     ac->replies.tail = NULL;
@@ -216,10 +215,9 @@ int redisAsyncSetConnectCallback(redisAsyncContext *ac, redisConnectCallback *fn
     return REDIS_ERR;
 }
 
-int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn, void *cbdata) {
+int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn) {
     if (ac->onDisconnect == NULL) {
         ac->onDisconnect = fn;
-        ac->disconnectCbdata = cbdata;
         return REDIS_OK;
     }
     return REDIS_ERR;
@@ -308,10 +306,10 @@ static void __redisAsyncFree(redisAsyncContext *ac) {
      * this context, the status will always be REDIS_OK. */
     if (ac->onDisconnect && (c->flags & REDIS_CONNECTED)) {
         if (c->flags & REDIS_FREEING) {
-            ac->onDisconnect(ac,REDIS_OK,ac->disconnectCbdata);
+            ac->onDisconnect(ac,REDIS_OK);
         } else {
             c->flags |= REDIS_FREEING;
-            ac->onDisconnect(ac,(ac->err == 0) ? REDIS_OK : REDIS_ERR,ac->disconnectCbdata);
+            ac->onDisconnect(ac,(ac->err == 0) ? REDIS_OK : REDIS_ERR);
         }
     }
 
index 3d20241c6e117412d5f24d6c0374576aa649b906..59cbf469b9f1d9454c15571b0f756895be900477 100644 (file)
@@ -54,7 +54,7 @@ typedef struct redisCallbackList {
 } redisCallbackList;
 
 /* Connection callback prototypes */
-typedef void (redisDisconnectCallback)(const struct redisAsyncContext*, int status, void *cbdata);
+typedef void (redisDisconnectCallback)(const struct redisAsyncContext*, int status);
 typedef void (redisConnectCallback)(const struct redisAsyncContext*, int status);
 
 /* Context for an async connection to Redis */
@@ -85,8 +85,6 @@ typedef struct redisAsyncContext {
     /* Called when either the connection is terminated due to an error or per
      * user request. The status is set accordingly (REDIS_OK, REDIS_ERR). */
     redisDisconnectCallback *onDisconnect;
-    /* Hiredis is just brain-damaged here, need to fix it */
-    void *disconnectCbdata;
 
     /* Called when the first write event was received. */
     redisConnectCallback *onConnect;
@@ -109,7 +107,7 @@ redisAsyncContext *redisAsyncConnectBindWithReuse(const char *ip, int port,
                                                   const char *source_addr);
 redisAsyncContext *redisAsyncConnectUnix(const char *path);
 int redisAsyncSetConnectCallback(redisAsyncContext *ac, redisConnectCallback *fn);
-int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn, void *cbdata);
+int redisAsyncSetDisconnectCallback(redisAsyncContext *ac, redisDisconnectCallback *fn);
 void redisAsyncDisconnect(redisAsyncContext *ac);
 void redisAsyncFree(redisAsyncContext *ac);
 
index 57fc734f9af89eb2b88be48243b99750fdce4f14..2d251075383d3fca4a58ffd46e2adaeab06292fc 100644 (file)
@@ -258,10 +258,9 @@ rspamd_redis_pool_schedule_timeout (struct rspamd_redis_pool_connection *conn)
 }
 
 static void
-rspamd_redis_pool_on_disconnect (const struct redisAsyncContext *ac, int status,
-               void *ud)
+rspamd_redis_pool_on_disconnect (const struct redisAsyncContext *ac, int status)
 {
-       struct rspamd_redis_pool_connection *conn = ud;
+       struct rspamd_redis_pool_connection *conn = ac->data;
 
        /*
         * Here, we know that redis itself will free this connection
@@ -313,13 +312,13 @@ rspamd_redis_pool_new_connection (struct rspamd_redis_pool *pool,
                        g_hash_table_insert (elt->pool->elts_by_ctx, ctx, conn);
                        g_queue_push_head_link (elt->active, conn->entry);
                        conn->ctx = ctx;
+                       ctx->data = conn;
                        rspamd_random_hex (conn->tag, sizeof (conn->tag));
                        REF_INIT_RETAIN (conn, rspamd_redis_pool_conn_dtor);
                        msg_debug_rpool ("created new connection to %s:%d: %p", ip, port, ctx);
 
                        redisLibevAttach (pool->event_loop, ctx);
-                       redisAsyncSetDisconnectCallback (ctx, rspamd_redis_pool_on_disconnect,
-                                       conn);
+                       redisAsyncSetDisconnectCallback (ctx, rspamd_redis_pool_on_disconnect);
 
                        if (password) {
                                redisAsyncCommand (ctx, NULL, NULL,