Mercurial > dovecot > core-2.2
changeset 21801:62499b1abc68
lib-dict: Track transaction counts
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Wed, 22 Mar 2017 12:01:07 +0200 |
parents | a1ebd140977c |
children | 246f9b9c41b3 |
files | src/lib-dict/dict-private.h src/lib-dict/dict.c |
diffstat | 2 files changed, 16 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-dict/dict-private.h Wed Mar 22 10:33:20 2017 +0200 +++ b/src/lib-dict/dict-private.h Wed Mar 22 12:01:07 2017 +0200 @@ -49,6 +49,7 @@ struct dict_vfuncs v; unsigned int iter_count; + unsigned int transaction_count; }; struct dict_iterate_context {
--- a/src/lib-dict/dict.c Wed Mar 22 10:33:20 2017 +0200 +++ b/src/lib-dict/dict.c Wed Mar 22 12:01:07 2017 +0200 @@ -229,9 +229,16 @@ struct dict_transaction_context *dict_transaction_begin(struct dict *dict) { + struct dict_transaction_context *ctx; if (dict->v.transaction_init == NULL) - return &dict_transaction_unsupported; - return dict->v.transaction_init(dict); + ctx = &dict_transaction_unsupported; + else + ctx = dict->v.transaction_init(dict); + /* the dict in context can differ from the dict + passed as parameter, e.g. it can be dict-fail when + transactions are not supported. */ + ctx->dict->transaction_count++; + return ctx; } void dict_transaction_no_slowness_warning(struct dict_transaction_context *ctx) @@ -260,6 +267,8 @@ struct dict_transaction_context *ctx = *_ctx; *_ctx = NULL; + i_assert(ctx->dict->transaction_count > 0); + ctx->dict->transaction_count--; return ctx->dict->v.transaction_commit(ctx, FALSE, NULL, NULL); } @@ -270,6 +279,8 @@ struct dict_transaction_context *ctx = *_ctx; *_ctx = NULL; + i_assert(ctx->dict->transaction_count > 0); + ctx->dict->transaction_count--; ctx->dict->v.transaction_commit(ctx, TRUE, callback, context); } @@ -278,6 +289,8 @@ struct dict_transaction_context *ctx = *_ctx; *_ctx = NULL; + i_assert(ctx->dict->transaction_count > 0); + ctx->dict->transaction_count--; ctx->dict->v.transaction_rollback(ctx); }