From: Timo Sirainen Date: Wed, 27 Aug 2008 05:07:51 +0000 (+0300) Subject: dict API: deinit functions now take pointer-to-pointer parameter which gets NULLed. X-Git-Tag: 1.2.alpha1~53 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1dc6f277f5ac6a3dd5cd6aa75a7ef691de9acb7a;p=thirdparty%2Fdovecot%2Fcore.git dict API: deinit functions now take pointer-to-pointer parameter which gets NULLed. --HG-- branch : HEAD --- diff --git a/src/dict/dict-server.c b/src/dict/dict-server.c index 05de7acb68..2c70476f35 100644 --- a/src/dict/dict-server.c +++ b/src/dict/dict-server.c @@ -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); } diff --git a/src/lib-dict/dict.c b/src/lib-dict/dict.c index 3efba44635..c6c9ba0106 100644 --- a/src/lib-dict/dict.c +++ b/src/lib-dict/dict.c @@ -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); } diff --git a/src/lib-dict/dict.h b/src/lib-dict/dict.h index e5a45444fd..e5211ef797 100644 --- a/src/lib-dict/dict.h +++ b/src/lib-dict/dict.h @@ -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, diff --git a/src/plugins/expire/expire-plugin.c b/src/plugins/expire/expire-plugin.c index 35ccf20fc3..ac27a791e5 100644 --- a/src/plugins/expire/expire-plugin.c +++ b/src/plugins/expire/expire-plugin.c @@ -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); diff --git a/src/plugins/expire/expire-tool.c b/src/plugins/expire/expire-tool.c index 4ad3324ee6..e8d5829dc8 100644 --- a/src/plugins/expire/expire-tool.c +++ b/src/plugins/expire/expire-tool.c @@ -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) diff --git a/src/plugins/quota/quota-dict.c b/src/plugins/quota/quota-dict.c index 02c8d7944e..d78c6a1521 100644 --- a/src/plugins/quota/quota-dict.c +++ b/src/plugins/quota/quota-dict.c @@ -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; }