]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
dict API: deinit functions now take pointer-to-pointer parameter which gets NULLed.
authorTimo Sirainen <tss@iki.fi>
Wed, 27 Aug 2008 05:07:51 +0000 (08:07 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 27 Aug 2008 05:07:51 +0000 (08:07 +0300)
--HG--
branch : HEAD

src/dict/dict-server.c
src/lib-dict/dict.c
src/lib-dict/dict.h
src/plugins/expire/expire-plugin.c
src/plugins/expire/expire-tool.c
src/plugins/quota/quota-dict.c

index 05de7acb68f7d47d127f1c8ee139fa8520319ef0..2c70476f355dced9542f2064786c961297ecb5a5 100644 (file)
@@ -99,7 +99,7 @@ static int cmd_iterate(struct dict_client_connection *conn, const char *line)
                        o_stream_send_str(conn->output, reply);
                } T_END;
        }
-       dict_iterate_deinit(ctx);
+       dict_iterate_deinit(&ctx);
 
        o_stream_send_str(conn->output, "\n");
        o_stream_uncork(conn->output);
@@ -196,7 +196,7 @@ static int cmd_commit(struct dict_client_connection *conn, const char *line)
        if (dict_server_transaction_lookup_parse(conn, line, &trans) < 0)
                return -1;
 
-       ret = dict_transaction_commit(trans->ctx);
+       ret = dict_transaction_commit(&trans->ctx);
        reply = t_strdup_printf("%c\n", ret == 0 ? DICT_PROTOCOL_REPLY_OK :
                                DICT_PROTOCOL_REPLY_FAIL);
        o_stream_send_str(conn->output, reply);
@@ -211,7 +211,7 @@ static int cmd_rollback(struct dict_client_connection *conn, const char *line)
        if (dict_server_transaction_lookup_parse(conn, line, &trans) < 0)
                return -1;
 
-       dict_transaction_rollback(trans->ctx);
+       dict_transaction_rollback(&trans->ctx);
        dict_server_transaction_array_remove(conn, trans);
        return 0;
 }
@@ -414,7 +414,7 @@ static void dict_client_connection_input(struct dict_client_connection *conn)
 
 static void dict_client_connection_deinit(struct dict_client_connection *conn)
 {
-       const struct dict_server_transaction *transactions;
+       struct dict_server_transaction *transactions;
        unsigned int i, count;
 
        if (conn->prev == NULL)
@@ -425,9 +425,9 @@ static void dict_client_connection_deinit(struct dict_client_connection *conn)
                conn->next->prev = conn->prev;
 
        if (array_is_created(&conn->transactions)) {
-               transactions = array_get(&conn->transactions, &count);
+               transactions = array_get_modifiable(&conn->transactions, &count);
                for (i = 0; i < count; i++)
-                       dict_transaction_rollback(transactions[i].ctx);
+                       dict_transaction_rollback(&transactions[i].ctx);
                array_free(&conn->transactions);
        }
 
index 3efba446358fd8ed1cf6e7953bc8bb87bf3e70cb..c6c9ba0106b22062771972284ff045279141b9b0 100644 (file)
@@ -103,8 +103,11 @@ int dict_iterate(struct dict_iterate_context *ctx,
        return ctx->dict->v.iterate(ctx, key_r, value_r);
 }
 
-void dict_iterate_deinit(struct dict_iterate_context *ctx)
+void dict_iterate_deinit(struct dict_iterate_context **_ctx)
 {
+       struct dict_iterate_context *ctx = *_ctx;
+
+       *_ctx = NULL;
        ctx->dict->v.iterate_deinit(ctx);
 }
 
@@ -113,13 +116,19 @@ struct dict_transaction_context *dict_transaction_begin(struct dict *dict)
        return dict->v.transaction_init(dict);
 }
 
-int dict_transaction_commit(struct dict_transaction_context *ctx)
+int dict_transaction_commit(struct dict_transaction_context **_ctx)
 {
+       struct dict_transaction_context *ctx = *_ctx;
+
+       *_ctx = NULL;
        return ctx->dict->v.transaction_commit(ctx);
 }
 
-void dict_transaction_rollback(struct dict_transaction_context *ctx)
+void dict_transaction_rollback(struct dict_transaction_context **_ctx)
 {
+       struct dict_transaction_context *ctx = *_ctx;
+
+       *_ctx = NULL;
        ctx->dict->v.transaction_rollback(ctx);
 }
 
index e5a45444fd4ded26550097fca110fae14d703b9c..e5211ef79777fdd2510b285282fec0a8421ab505 100644 (file)
@@ -43,14 +43,14 @@ dict_iterate_init(struct dict *dict, const char *path,
 /* Returns -1 = error, 0 = finished, 1 = key/value set */
 int dict_iterate(struct dict_iterate_context *ctx,
                 const char **key_r, const char **value_r);
-void dict_iterate_deinit(struct dict_iterate_context *ctx);
+void dict_iterate_deinit(struct dict_iterate_context **ctx);
 
 /* Start a new dictionary transaction. */
 struct dict_transaction_context *dict_transaction_begin(struct dict *dict);
 /* Commit the transaction. Returns 0 if ok, -1 if failed. */
-int dict_transaction_commit(struct dict_transaction_context *ctx);
+int dict_transaction_commit(struct dict_transaction_context **ctx);
 /* Rollback all changes made in transaction. */
-void dict_transaction_rollback(struct dict_transaction_context *ctx);
+void dict_transaction_rollback(struct dict_transaction_context **ctx);
 
 /* Set key=value in dictionary. */
 void dict_set(struct dict_transaction_context *ctx,
index 35ccf20fc38e2184867c850aadc1f47931ce7985..ac27a791e5ebdb25f964e0dc360430d2778f2273 100644 (file)
@@ -147,7 +147,7 @@ expire_mailbox_transaction_commit(struct mailbox_transaction_context *t,
                                new_stamp += xpr_box->expire_secs;
                                dict_set(dctx, key, dec2str(new_stamp));
                        }
-                       dict_transaction_commit(dctx);
+                       dict_transaction_commit(&dctx);
                }
        } T_END;
        i_free(xt);
index 4ad3324ee67b4a67a589b594d28ed42c680660ad..e8d5829dc845fdf5e2ad0f9e17ff000a052b1bb0 100644 (file)
@@ -278,11 +278,11 @@ static void expire_run(bool testrun)
                        }
                }
        }
-       dict_iterate_deinit(iter);
+       dict_iterate_deinit(&iter);
        if (!testrun)
-               dict_transaction_commit(trans);
+               dict_transaction_commit(&trans);
        else
-               dict_transaction_rollback(trans);
+               dict_transaction_rollback(&trans);
        dict_deinit(&dict);
 
        if (ctx.user != NULL)
index 02c8d7944ee3dc38be1cfef574c8ca56e2b53f5d..d78c6a1521c4eb5c897996fe39be60de9b5d1f18 100644 (file)
@@ -97,7 +97,7 @@ dict_quota_count(struct dict_quota_root *root,
                dict_set(dt, DICT_QUOTA_CURRENT_COUNT_PATH, dec2str(count));
        } T_END;
 
-       if (dict_transaction_commit(dt) < 0)
+       if (dict_transaction_commit(&dt) < 0)
                i_error("dict_quota: Couldn't update quota");
 
        *value_r = want_bytes ? bytes : count;
@@ -167,7 +167,7 @@ dict_quota_update(struct quota_root *_root,
                }
        }
        
-       if (dict_transaction_commit(dt) < 0)
+       if (dict_transaction_commit(&dt) < 0)
                return -1;
        return 0;
 }