# HG changeset patch # User Timo Sirainen # Date 1219813671 -10800 # Node ID b46b0158eb64d049eeb8e94025fc4363e90681ff # Parent dfae8a7d695b08dbe393b54926a3c21043db80d0 dict API: deinit functions now take pointer-to-pointer parameter which gets NULLed. diff -r dfae8a7d695b -r b46b0158eb64 src/dict/dict-server.c --- a/src/dict/dict-server.c Wed Aug 27 08:06:17 2008 +0300 +++ b/src/dict/dict-server.c Wed Aug 27 08:07:51 2008 +0300 @@ -99,7 +99,7 @@ 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 @@ 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 @@ 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_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 @@ 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 -r dfae8a7d695b -r b46b0158eb64 src/lib-dict/dict.c --- a/src/lib-dict/dict.c Wed Aug 27 08:06:17 2008 +0300 +++ b/src/lib-dict/dict.c Wed Aug 27 08:07:51 2008 +0300 @@ -103,8 +103,11 @@ 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 @@ 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 -r dfae8a7d695b -r b46b0158eb64 src/lib-dict/dict.h --- a/src/lib-dict/dict.h Wed Aug 27 08:06:17 2008 +0300 +++ b/src/lib-dict/dict.h Wed Aug 27 08:07:51 2008 +0300 @@ -43,14 +43,14 @@ /* 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 -r dfae8a7d695b -r b46b0158eb64 src/plugins/expire/expire-plugin.c --- a/src/plugins/expire/expire-plugin.c Wed Aug 27 08:06:17 2008 +0300 +++ b/src/plugins/expire/expire-plugin.c Wed Aug 27 08:07:51 2008 +0300 @@ -147,7 +147,7 @@ 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 -r dfae8a7d695b -r b46b0158eb64 src/plugins/expire/expire-tool.c --- a/src/plugins/expire/expire-tool.c Wed Aug 27 08:06:17 2008 +0300 +++ b/src/plugins/expire/expire-tool.c Wed Aug 27 08:07:51 2008 +0300 @@ -278,11 +278,11 @@ } } } - 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 -r dfae8a7d695b -r b46b0158eb64 src/plugins/quota/quota-dict.c --- a/src/plugins/quota/quota-dict.c Wed Aug 27 08:06:17 2008 +0300 +++ b/src/plugins/quota/quota-dict.c Wed Aug 27 08:07:51 2008 +0300 @@ -97,7 +97,7 @@ 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 @@ } } - if (dict_transaction_commit(dt) < 0) + if (dict_transaction_commit(&dt) < 0) return -1; return 0; }