]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dict: Changed internal transaction_commit() to return void
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 6 May 2016 10:45:34 +0000 (13:45 +0300)
committerGitLab <gitlab@git.dovecot.net>
Sun, 8 May 2016 21:29:56 +0000 (00:29 +0300)
Somewhat simplifies the code now that it doesn't have to both call a
callback and return the same ret.

src/lib-dict-extra/dict-fs.c
src/lib-dict/dict-client.c
src/lib-dict/dict-file.c
src/lib-dict/dict-memcached-ascii.c
src/lib-dict/dict-private.h
src/lib-dict/dict-redis.c
src/lib-dict/dict-sql.c
src/lib-dict/dict.c

index 82ea8273084112f679778bc73e9df89d219c7966..bf1595f92c11b6de10d24f1e905e71e503a18122 100644 (file)
@@ -258,7 +258,7 @@ static int fs_dict_write_changes(struct dict_transaction_memory_context *ctx)
        return 0;
 }
 
-static int
+static void
 fs_dict_transaction_commit(struct dict_transaction_context *_ctx,
                           bool async ATTR_UNUSED,
                           dict_transaction_commit_callback_t *callback,
@@ -274,9 +274,7 @@ fs_dict_transaction_commit(struct dict_transaction_context *_ctx,
                ret = 1;
        pool_unref(&ctx->pool);
 
-       if (callback != NULL)
-               callback(ret, context);
-       return ret;
+       callback(ret, context);
 }
 
 struct dict dict_driver_fs = {
index 40378c60169e680daed7ebedf63c68e60287c3ba..bf9a370c2d1173baef7c04fd26bdef1e5277cd1d 100644 (file)
@@ -768,7 +768,7 @@ static void dict_async_input(struct client_dict *dict)
        }
 }
 
-static int
+static void
 client_dict_transaction_commit(struct dict_transaction_context *_ctx,
                               bool async,
                               dict_transaction_commit_callback_t *callback,
@@ -799,6 +799,7 @@ client_dict_transaction_commit(struct dict_transaction_context *_ctx,
                                dict->io = io_add(dict->fd, IO_READ,
                                                  dict_async_input, dict);
                        }
+                       return;
                } else {
                        /* sync commit, read reply */
                        if (client_dict_read_line(dict, &line, &error) < 0) {
@@ -830,14 +831,12 @@ client_dict_transaction_commit(struct dict_transaction_context *_ctx,
                        }
                }
        }
+       DLLIST_REMOVE(&dict->transactions, ctx);
 
-       if (ret < 0 || !async) {
-               DLLIST_REMOVE(&dict->transactions, ctx);
-               i_free(ctx);
+       callback(ret, context);
+       i_free(ctx);
 
-               client_dict_add_timeout(dict);
-       }
-       return ret;
+       client_dict_add_timeout(dict);
 }
 
 static void
index 856453c62575e9bf716135a51f38a84b67bb9bd7..615d2935eb5c6c894f0870dc31e23040babcc732 100644 (file)
@@ -623,7 +623,7 @@ static int file_dict_write_changes(struct dict_transaction_memory_context *ctx,
        return 0;
 }
 
-static int
+static void
 file_dict_transaction_commit(struct dict_transaction_context *_ctx,
                             bool async ATTR_UNUSED,
                             dict_transaction_commit_callback_t *callback,
@@ -642,9 +642,7 @@ file_dict_transaction_commit(struct dict_transaction_context *_ctx,
                ret = 1;
        pool_unref(&ctx->pool);
 
-       if (callback != NULL)
-               callback(ret, context);
-       return ret;
+       callback(ret, context);
 }
 
 struct dict dict_driver_file = {
index 1bcaa02d5f1aff0dce781830d45875d960c64d54..3d1e4571a169544294181a9d3e5e784485dc5da8 100644 (file)
@@ -610,7 +610,7 @@ memcached_ascii_transaction_send(struct dict_memcached_ascii_commit_ctx *ctx)
        return 0;
 }
 
-static int
+static void
 memcached_ascii_transaction_commit(struct dict_transaction_context *_ctx,
                                   bool async,
                                   dict_transaction_commit_callback_t *callback,
@@ -637,7 +637,7 @@ memcached_ascii_transaction_commit(struct dict_transaction_context *_ctx,
 
                if (async && ret == 0) {
                        pool_unref(&ctx->pool);
-                       return 1;
+                       return;
                }
 
                if (ret == 0) {
@@ -647,10 +647,8 @@ memcached_ascii_transaction_commit(struct dict_transaction_context *_ctx,
                        }
                }
        }
-       if (callback != NULL)
-               callback(ret, context);
+       callback(ret, context);
        pool_unref(&ctx->pool);
-       return ret;
 }
 
 struct dict dict_driver_memcached_ascii = {
index 16893e8ac45033cdbe8142c5cb783280fe1e2ec6..049588d4da80b467bcdbe213f60efd4ad97d7597 100644 (file)
@@ -23,10 +23,11 @@ struct dict_vfuncs {
                              const char **error_r);
 
        struct dict_transaction_context *(*transaction_init)(struct dict *dict);
-       int (*transaction_commit)(struct dict_transaction_context *ctx,
-                                 bool async,
-                                 dict_transaction_commit_callback_t *callback,
-                                 void *context);
+       /* call the callback before returning if non-async commits */
+       void (*transaction_commit)(struct dict_transaction_context *ctx,
+                                  bool async,
+                                  dict_transaction_commit_callback_t *callback,
+                                  void *context);
        void (*transaction_rollback)(struct dict_transaction_context *ctx);
 
        void (*set)(struct dict_transaction_context *ctx,
index 5d16474898b5913f9ff545872ba6237da6f3cad1..2d38eb59c30276f19e7b776fe56edaa68a82f7e4 100644 (file)
@@ -577,7 +577,7 @@ redis_transaction_init(struct dict *_dict)
        return &ctx->ctx;
 }
 
-static int
+static void
 redis_transaction_commit(struct dict_transaction_context *_ctx, bool async,
                         dict_transaction_commit_callback_t *callback,
                         void *context)
@@ -610,14 +610,12 @@ redis_transaction_commit(struct dict_transaction_context *_ctx, bool async,
                        redis_input_state_add(dict, REDIS_INPUT_STATE_EXEC_REPLY);
                if (async) {
                        i_free(ctx);
-                       return 1;
+                       return;
                }
                redis_wait(dict);
        }
-       if (callback != NULL)
-               callback(ret, context);
+       callback(ret, context);
        i_free(ctx);
-       return ret;
 }
 
 static void redis_transaction_rollback(struct dict_transaction_context *_ctx)
index dcaea55ee184938cfa400ebc4647fe38700553d7..2ba4179165d5368966c2c29d140826cfe6827ec1 100644 (file)
@@ -798,7 +798,7 @@ sql_dict_transaction_commit_callback(const char *error,
        sql_dict_transaction_free(ctx);
 }
 
-static int
+static void
 sql_dict_transaction_commit(struct dict_transaction_context *_ctx, bool async,
                            dict_transaction_commit_callback_t *callback,
                            void *context)
@@ -822,7 +822,7 @@ sql_dict_transaction_commit(struct dict_transaction_context *_ctx, bool async,
                ctx->async_context = context;
                sql_transaction_commit(&ctx->sql_ctx,
                        sql_dict_transaction_commit_callback, ctx);
-               return 1;
+               return;
        } else {
                if (sql_transaction_commit_s(&ctx->sql_ctx, &error) < 0) {
                        i_error("sql dict: commit failed: %s", error);
@@ -834,9 +834,7 @@ sql_dict_transaction_commit(struct dict_transaction_context *_ctx, bool async,
        }
        sql_dict_transaction_free(ctx);
 
-       if (callback != NULL)
-               callback(ret, context);
-       return ret;
+       callback(ret, context);
 }
 
 static void sql_dict_transaction_rollback(struct dict_transaction_context *_ctx)
index e8c4123650cb44869cdc4f035ea85973c7556274..e2ddff2e49c4706b2f477195e5ab1580b782b2f9 100644 (file)
@@ -187,12 +187,21 @@ struct dict_transaction_context *dict_transaction_begin(struct dict *dict)
        return dict->v.transaction_init(dict);
 }
 
+static void dict_transaction_commit_sync_callback(int ret, void *context)
+{
+       int *ret_p = context;
+       *ret_p = ret;
+}
+
 int dict_transaction_commit(struct dict_transaction_context **_ctx)
 {
        struct dict_transaction_context *ctx = *_ctx;
+       int ret;
 
        *_ctx = NULL;
-       return ctx->dict->v.transaction_commit(ctx, FALSE, NULL, NULL);
+       ctx->dict->v.transaction_commit(ctx, FALSE,
+               dict_transaction_commit_sync_callback, &ret);
+       return ret;
 }
 
 void dict_transaction_commit_async(struct dict_transaction_context **_ctx,