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)
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);
}
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);
}
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);
}