]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
eliminate smembers: fix again
authorresec <resec0109@gmail.com>
Tue, 19 Nov 2019 11:30:21 +0000 (11:30 +0000)
committerresec <resec0109@gmail.com>
Tue, 19 Nov 2019 11:30:21 +0000 (11:30 +0000)
src/libstat/backends/redis_backend.c

index eab2385328b774eae69ec5acaead98f9ae049bd2..d4ac6a30ee3ff756061fd84f91c9921af139f48f 100644 (file)
@@ -846,9 +846,10 @@ rspamd_redis_stat_keys (redisAsyncContext *c, gpointer r, gpointer priv)
 {
        struct rspamd_redis_stat_elt *redis_elt = (struct rspamd_redis_stat_elt *)priv;
        struct rspamd_redis_stat_cbdata *cbdata;
-       redisReply *reply = r, *more, *elts, *elt;
+       redisReply *reply = r, *more_elt, *elts, *elt;
        gchar **pk, *k;
        guint i, processed = 0;
+       gboolean more = false;
 
        cbdata = redis_elt->cbdata;
 
@@ -860,9 +861,13 @@ rspamd_redis_stat_keys (redisAsyncContext *c, gpointer r, gpointer priv)
 
        if (c->err == 0 && r != NULL) {
                if (reply->type == REDIS_REPLY_ARRAY) {
-                       more = reply->element[0];
+                       more_elt = reply->element[0];
                        elts = reply->element[1];
 
+                       if (more_elt != NULL && more_elt->str != NULL && strcmp (more_elt->str, "0") != 0) {
+                               more = true;
+                       }
+
                        g_ptr_array_set_size (cbdata->cur_keys, elts->elements);
 
                        for (i = 0; i < elts->elements; i ++) {
@@ -915,7 +920,7 @@ rspamd_redis_stat_keys (redisAsyncContext *c, gpointer r, gpointer priv)
                        }
                }
 
-               if (more != NULL && more->integer) {
+               if (more) {
                        /* Cleanup the cbdata->cur_keys and re-allowcate */
                        for (i = 0; i < cbdata->cur_keys->len; i ++) {
                                k = g_ptr_array_index (cbdata->cur_keys, i);
@@ -928,8 +933,10 @@ rspamd_redis_stat_keys (redisAsyncContext *c, gpointer r, gpointer priv)
 
                        /* Get more keys */
                        redisAsyncCommand (cbdata->redis, rspamd_redis_stat_keys, redis_elt,
-                                       "SSCAN %s_keys %d COUNT 1000",
-                                       cbdata->elt->ctx->stcf->symbol, more->integer);
+                                       "SSCAN %s_keys %s COUNT 1000",
+                                       cbdata->elt->ctx->stcf->symbol, more_elt->str);
+
+                       cbdata->inflight += 1;
                }
                else {
                        /* Set up the required keys */